未调用 OnAuthorization
OnAuthorization isn't being called
我使用具有自定义授权的 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()
中的构造函数在程序启动时被调用。但是“OnAuthorization()
”方法永远不会被调用。
我错过了什么?
问题是我实现的授权来自MVC。但是对于网页api,需要另外授权,看起来差不多,但有点不同。
首先我必须删除自定义授权中对 MVC 的引用 class 并改用 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 - 命名空间内)
在我安装了最新版本的 WebApi 后,似乎授权停止了工作,使用 "ASP.NET MVC 4 Web Application" 中的 nuget-console 并启用了 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);
}
}
在我的 Controller-Actions 中,我通过以下方式调用 Auth:
public class CustomerController : ApiController
{
[Auth(Permissions.CanLogin, Permissions.IsAdmin)]
public HttpResponseMessage Get(Guid id)
{
// Do something
}
}
(Permissions
只是一个简单的枚举。)
我可以看到 Auth()
中的构造函数在程序启动时被调用。但是“OnAuthorization()
”方法永远不会被调用。
我错过了什么?
问题是我实现的授权来自MVC。但是对于网页api,需要另外授权,看起来差不多,但有点不同。
首先我必须删除自定义授权中对 MVC 的引用 class 并改用 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 - 命名空间内)
在我安装了最新版本的 WebApi 后,似乎授权停止了工作,使用 "ASP.NET MVC 4 Web Application" 中的 nuget-console 并启用了 Web Api 选项。