【问题标题】:Authorisation Action Filters for WebAPIWebAPI 的授权操作过滤器
【发布时间】:2012-12-06 20:48:25
【问题描述】:

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

 public class AuthoriseUserViewAccess : FilterAttribute , IAuthorizationFilter
{

    public void OnAuthorization(AuthorizationContext filterContext)
    {
    }
 }

这在我的控制器和操作中运行良好。

但我也想对我在同一解决方案中使用的 WEB API 控制器做同样的事情。

我已尝试将 AuthoriseUserViewAccess 属性应用于我的 apicontroller,但似乎从未调用 onAuthorisation 方法。

这是否也适用于 WebAPI 控制器,或者是否有其他方法可以使用 WEBAPI 实现相同的目标。

【问题讨论】:

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

标签: asp.net-mvc asp.net-web-api action-filter


【解决方案1】:

我使用了这个测试并调用了 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);
    }
}

【讨论】:

  • 谢谢。可能是因为我使用的是 mvc 命名空间。在您的示例中实现 AuthorizeAttribute 与在我的示例中实现 IAUthorizationFilter 有什么区别?你为什么要使用一个而不是另一个?
  • 从 AuthorizationAttribute 继承时,您可以在基本验证之前或之后添加自定义验证。这样您就可以使用 AuthorizationAttribute 中的内置功能。如果从 IAuthorizationFilter 继承,则必须从头开始实现所有内容。这取决于你想要什么。我个人会从 AuthorizeAttribute 继承,并在基本 OnAuthorization 方法之前或之后添加我的自定义授权逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 2014-03-24
  • 2012-07-14
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多