2013-03-13 140 views
1

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()'的成员覆盖。

回答

1

您必须使用Authorize属性来修饰操作方法中的控制器。

为什么?因为该属性需要在每个请求上收到的http上下文。 测试方法不能提供这种上下文,而且甚至在没有提供HttpContext的情况下甚至不使用该属性。在操作方法

尝试tesing,看看是否会做的伎俩

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

如果这会工作,找到一个方法来插入您的测试项目中的HTTP上下文。

+0

所以这是不可能的使用此属性的web服务来检查登录的人是否有权访问该方法? – 2013-03-13 14:23:52

+0

我不确定你可以在WCF中使用它,但我相信你可以在MVC和WebApi中使用它,但只能用于Action方法和控制器。如果您的Web服务依赖于遵循相同MVC模式的新WebApi,那么您可以使用它。如果使用带数据契约的传统WCF,请执行一些文档,因为我不认为您可以使用相同的属性(存在不同的方法)。 – Freeman 2013-03-13 14:26:28

+0

不同的方法可能是PrincipalPermission我认为...谢谢! – 2013-03-13 14:28:25