OnAuthorization 未被调用

Ole*_*ers 2 asp.net-mvc authorization asp.net-web-api

我使用具有自定义授权的 WebApi 服务。这是 AuthorizationAttribute:(为了尽可能简单,我删除了所有逻辑,只尝试发送 401):

public class Auth : AuthorizeAttribute
{
    private readonly List<Permissions> _requiredPermissions;

    public Auth(params Permissions[] permissions)
    {
      _requiredPermissions = permissions.ToList();
    }

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
       base.HandleUnauthorizedRequest(filterContext); 
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的 Controller-Actions 中,我通过以下方式调用 Auth:

public class CustomerController : ApiController
{
   [Auth(Permissions.CanLogin, Permissions.IsAdmin)]
   public HttpResponseMessage Get(Guid id)
   {
        // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

Permissions只是一个简单的枚举。)

我可以看到构造函数Auth()在程序启动时被调用。但“ OnAuthorization()”方法永远不会被调用。

我在那里缺少什么?

Ole*_*ers 5

问题是我实现的授权来自MVC。但是对于web api来说,需要另外一个授权,看起来几乎一样,但还是有一点不同。

首先,我必须删除自定义授权类中对 MVC 的引用并使用 web.http 代替:

所以。我不得不删除这个:

using System.Web.Mvc
Run Code Online (Sandbox Code Playgroud)

并添加以下内容:

using System.Web.Http;
Run Code Online (Sandbox Code Playgroud)

那么OnAuthorization-Method 需要另一个参数。所以我必须改变这一点:

public override void OnAuthorization(AuthorizationContext filterContext)
Run Code Online (Sandbox Code Playgroud)

对此:

public override void OnAuthorization(HttpActionContext filterContext)
Run Code Online (Sandbox Code Playgroud)

(HttpActionContext 位于 System.Web.Http.Controllers - 命名空间内)

在我使用启用了 Web Api 选项的“ASP.NET MVC 4 Web 应用程序”内的 nuget-console 安装了最新版本的 WebApi 后,授权似乎停止工作。