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()”方法永远不会被调用。
我在那里缺少什么?
问题是我实现的授权来自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 后,授权似乎停止工作。
| 归档时间: |
|
| 查看次数: |
1460 次 |
| 最近记录: |