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()'。
答案 0 :(得分:1)
您必须使用Authorize属性来装饰控制器和操作方法。
为什么呢?因为该属性需要在每次请求时收到的http上下文。 测试方法无法提供此上下文,此外,该属性甚至不用于未提供HttpContext的情况。
尝试测试一种动作方法,看看是否能解决这个问题
[PSAuthorize]
public ActionResult Home()
{
return View();
}
如果这样可行,请找到在测试项目中插入http上下文的方法。