麻烦与自定义授权属性
问题描述:
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是在所有属性/方法中只有`throw new NotImplementedException()'的成员覆盖。
答
您必须使用Authorize属性来修饰操作方法中的控制器。
为什么?因为该属性需要在每个请求上收到的http上下文。 测试方法不能提供这种上下文,而且甚至在没有提供HttpContext的情况下甚至不使用该属性。在操作方法
尝试tesing,看看是否会做的伎俩
[PSAuthorize]
public ActionResult Home()
{
return View();
}
如果这会工作,找到一个方法来插入您的测试项目中的HTTP上下文。
所以这是不可能的使用此属性的web服务来检查登录的人是否有权访问该方法? – 2013-03-13 14:23:52
我不确定你可以在WCF中使用它,但我相信你可以在MVC和WebApi中使用它,但只能用于Action方法和控制器。如果您的Web服务依赖于遵循相同MVC模式的新WebApi,那么您可以使用它。如果使用带数据契约的传统WCF,请执行一些文档,因为我不认为您可以使用相同的属性(存在不同的方法)。 – Freeman 2013-03-13 14:26:28
不同的方法可能是PrincipalPermission我认为...谢谢! – 2013-03-13 14:28:25