我使用自定义授权的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;方法永远不会被调用。
我在那里错过了什么?
答案 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之后,授权人似乎停止了工作。