OnAuthorization没有被调用

时间:2015-05-27 14:07:02

标签: asp.net-mvc asp.net-web-api authorization

我使用自定义授权的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); 
    }
}

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

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

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

我可以看到来自Auth()的构造函数在程序启动时被调用。但是&#34; OnAuthorization()&#34;方法永远不会被调用。

我在那里错过了什么?

1 个答案:

答案 0 :(得分:3)

问题是我实施的授权来自MVC。但是对于web api,需要另一个授权,它看起来几乎相同,但稍有不同。

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

因此。我不得不删除它:

using System.Web.Mvc

而是添加:

using System.Web.Http;

然后OnAuthorization-Method需要另一个参数。 所以我不得不改变这个:

public override void OnAuthorization(AuthorizationContext filterContext)

到此:

public override void OnAuthorization(HttpActionContext filterContext)

(HttpActionContext在System.Web.Http.Controllers - 名称空间内)

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