2016-11-22 112 views
1

我已经实现了基于令牌的认证。 我想编写自定义授权属性。Asp.net中的自定义授权WebApi只为授权属性调用

这背后的原因是,某些时候UserIdentity.GetUserId()给出null。

所以要处理这个问题,我写了自定义授权属性,如下所示。

此自定义授权呼叫所有呼叫(匿名或授权呼叫)。 因此,我使用属性IsAuthorizeCall来检查来电是来自匿名还是授权。

我可以拨打电话吗?只有当我提到上述方法时,才想拨打此自定义authorzie。否则,这不应该被称为。

我该怎么做?

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

回答

1

我已经找到自己的答案。

如果过滤器添加到全局ASAX,然后将它即使提及或不要求所有 控制器和行动。

因此,我们需要从的Global.asax

GlobalConfiguration.Configuration.Filters.Add(new CustomAuthorize()); 

删除下列那么现在,自定义athorize将只在控制器或动作时提到调用。