自定义授权属性在 WebAPI 中不起作用
Posted
技术标签:
【中文标题】自定义授权属性在 WebAPI 中不起作用【英文标题】:Custom authorization attribute not working in WebAPI 【发布时间】:2014-06-13 21:01:58 【问题描述】: public class CustomAuthorizeAttribute : AuthorizationFilterAttribute
protected override bool AuthorizeCore(HttpContextBase httpContext)
return true;// if my current user is authorised
上面是我的 CustomAuthorizeAttribute 类 和
[CustomAuthorize] // both [CustomAuthorize] and [CustomAuthorizeAttribute ] I tried
public class ProfileController : ApiController
//My Code..
当我打电话时
http://localhost:1142/api/Profile
它没有触发CustomAuthorizeAttribute
我的 FilterConfig 类的更多内容如下所示
public class FilterConfig
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
filters.Add(new CustomAuthorizeAttribute());
如果我遗漏了什么,请帮忙。
【问题讨论】:
【参考方案1】:试试这个。
public class CustomAuthorizeAttribute : AuthorizeAttribute
protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
return true;
【讨论】:
Thankyou .. 但我得到了构建错误,比如没有合适的方法来覆盖(实际上在 AuthorizeAttribute 中没有这样的方法):( 这个属性来自System.Web.Http。如果你使用 System.Web.Mvc 属性,你应该重写 AuthorizeCore 方法! 这是你真正需要的东西。如果用户被授权,只需给出一个布尔值。【参考方案2】:-
看起来您使用的是 MVC 过滤器而不是 Web API 过滤器。可以在样本中检测到它,因为它使用了
HttpContextBase
。请改用 System.Web.Http.Filters
命名空间中的过滤器。
您需要在 Web API 过滤器上覆盖 OnAuthorization 或 OnAuthorizationAsync。
您无需注册全局过滤器并用它来装饰您的控制器。注册它会使其在所有控制器上运行。
Web API 过滤器代码: https://github.com/aspnetwebstack/aspnetwebstack/blob/master/src/System.Web.Http/Filters/AuthorizationFilterAttribute.cs
【讨论】:
@ChaoticCoder 看起来像链接has been fixed。【参考方案3】:Y我们的自定义属性应该继承自System.Web.Http.Filters.AuthorizationFilterAttribute
它应该看起来像这样
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
public class CustomAuthorizeAttribute : System.Web.Http.Filters.AuthorizationFilterAttribute
public override bool AllowMultiple
get return false;
public override void OnAuthorization(HttpActionContext actionContext)
//Perform your logic here
base.OnAuthorization(actionContext);
【讨论】:
【参考方案4】:为了添加您从 System.Web.Http.Filters.AuthorizationFilterAttribute
继承的其他答案,我将其放入我的 OnAuthorization
方法中以确保用户已登录:
if (!actionContext.RequestContext.Principal.Identity.IsAuthenticated)
// or whatever sort you want to do to end the execution of the request
throw new HttpException(403, "Forbidden");
【讨论】:
以上是关于自定义授权属性在 WebAPI 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章