我已经实现了基于令牌的身份验证。 我想写自定义authorize属性。
这背后的原因是,有时UserIdentity.GetUserId()给出null。
所以为了解决这个问题,我编写了自定义authorize属性,如下所示。
此自定义授权调用所有呼叫(匿名或授权呼叫)。 所以我使用了IsAuthorizeCall属性来检查呼叫是来自匿名还是授权。
我可以拨打电话,我只想在上面提到的方法时调用这个自定义作者。否则不应该调用它。
我该怎么做?
public class CustomAuthorize : AuthorizationFilterAttribute
{
public bool IsAuthorizeCall { get; set; }
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
if (IsAuthorizeCall)
{
IdentityHelper IdentityHelper = new IdentityHelper();
if (IdentityHelper.UserId== Guid.Empty)
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
}
}
}
引用
Custom Authorization in Asp.net WebApi - what a mess?
How to Customize ASP.NET Web API AuthorizeAttribute for Unusual Requirements
答案 0 :(得分:0)
我自己找到了答案。
如果将过滤器添加到全局asax,则将为所有人调用它 控制器和行动,即使提到与否。
因此我们需要从 global.asax
中删除以下内容GlobalConfiguration.Configuration.Filters.Add(new CustomAuthorize());
现在,只有在控制器或操作中提到时,自定义athorize才会被调用。