2012-12-06 123 views
1

我有一个MVC 4解决方案,我已经将授权操作过滤器应用到各种控制器上,以便在允许访问某些控制器之前进行一些额外的检查。WebAPI的授权操作过滤器

public class AuthoriseUserViewAccess : FilterAttribute , IAuthorizationFilter 
{ 

    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
    } 
} 

这一直与我的控制器和行动很好地工作。

但我也想用同样的解决方案来使用我正在使用的WEB API控制器。

我已经尝试将AuthoriseUserViewAccess属性应用于我的apicontrollers,但onAuthorisation方法似乎永远不会被调用。

这应该与WebAPI控制器一起工作,还是有另一种方法实现与WEBAPI相同的事情。

+0

您是否尝试过创建一个继承自AuthorizationFilterAttribute的属性?还要确保您使用的是正确名称空间中的过滤器基类,因为Web API过滤器来自与MVC过滤器不同的过滤器。 –

回答

3

我用这个测试和OnAuthorization被调用。该属性应用于我的webapi。也许尝试从System.Web.Http.AuthorizeAttribute继承。

public class CustomAuthorize : System.Web.Http.AuthorizeAttribute 
{ 
    public override void OnAuthorization(
      System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     // Do other checks 
     var ok = false; 
     if (!ok) 
     { 
      actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden); 
      return; 
     } 

     base.OnAuthorization(actionContext); 
    } 
} 
+0

谢谢。可能是因为我在使用mvc命名空间。 您的示例中实现AuthorizeAttribute和我的示例中的IAUthorizationFilter之间有什么区别?为什么你会用另一个呢? – Kramer00

+0

当您从AuthorizationAttribute继承时,您可以在基本验证之前或之后添加自定义验证。这样您就可以使用AuthorizationAttribute中的内置功能。如果您从IAuthorizationFilter继承,则必须从头开始实现所有内容。 这取决于你想要什么。我个人会从AuthorizeAttribute继承,并在基础OnAuthorization方法之前或之后添加我的自定义授权逻辑。 –

+0

谢谢。非常感激。 – Kramer00