1

授权属性

public class PSAuthorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
    {
        return false;
    }        
}

测试类

[TestClass]
public class Test
{
    [TestMethod]        
    public void TestMethod()
    {
        Assert.IsNotNull(TestMore());
    }

    [PSAuthorize]
    public string TestMore()
    {
        return "Test Success";
    }
}

应用程序配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
    <add name="Defaultconnection" connectionString="Private"/>
</connectionStrings>
<system.web>
    <authentication mode="Forms">
        <forms loginUrl="~/Account/LogOn" timeout="2880"/>
    </authentication>

    <membership defaultProvider="CMSP">
        <providers>

            <add name="CMSP"
                 type="PS.Authentication.CustomMembershipProvider"
                 connectionStringName ="Defaultconnection"/>
        </providers>
    </membership>
</system.web>
</configuration>

问题

我已经为此工作了几个小时......

到目前为止,我还没有设法AuthorizeCore触发,我不知道出了什么问题。

我试图创建一个新的 MVC (v3) 项目并在那里添加相同的代码并且它可以工作..但是在我们的项目中它突然没有......

我错过了什么..?

我正在尝试将这项工作与自定义成员资格提供程序结合使用,但我不知道如何...首先我需要此属性来在某人未获得授权时触发暂停。

CustomMembershipProvider 是对 Membership 的覆盖,在所有属性/方法中只有“throw new NotImplementedException()”。

4

1 回答 1

1

您必须使用 Authorize 属性来装饰控制器和操作方法。

为什么?因为该属性需要在每个请求上收到的 http 上下文。测试方法无法提供此上下文,此外,该属性甚至不用于未提供 HttpContext 的情况。

尝试测试一个动作方法,看看是否能解决问题

[PSAuthorize]
public ActionResult Home()
{
    return View();
}

如果这可行,请找到一种在您的测试项目中插入 http 上下文的方法。

于 2013-03-13T14:20:27.663 回答