Asp.net中的自定义授权WebApi仅调用授权属性

时间:2016-11-22 10:07:39

标签: asp.net-mvc asp.net-web-api

我已经实现了基于令牌的身份验证。 我想写自定义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

1 个答案:

答案 0 :(得分:0)

我自己找到了答案。

  

如果将过滤器添加到全局asax,则将为所有人调用它   控制器和行动,即使提到与否。

因此我们需要从 global.asax

中删除以下内容
GlobalConfiguration.Configuration.Filters.Add(new CustomAuthorize());

现在,只有在控制器或操作中提到时,自定义athorize才会被调用。