自定义授权属性有问题

时间:2013-03-13 14:17:52

标签: c# asp.net-mvc authorization

AuthorizeAttribute

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

识别TestClass

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

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

App.Config中

<?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()'。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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