针对Ajax Jquery请求的自定义[授权]过滤器

时间:2016-11-22 14:41:25

标签: asp.net-mvc asp.net-mvc-4 authorization asp.net-authorization jquery-ajaxq

我派生自AuthorizeAttribute类并制作了我自己的CustomAuthorize

  protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.HttpContext.Response.StatusCode = 401;
            filterContext.Result = new JsonResult
            {

                Data = new DataSourceResult { Errors = new { error = "NotAuthorized" } }
                ,JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
        }
        else
        {
          // this is a standard request, let parent filter to handle it
           base.HandleUnauthorizedRequest(filterContext);
        }
    }

我使用Ajax Jquery调用的地方太多了,检查每个调用的响应看起来不太实际

window.location.href='/Auth/login';

我只是想知道,我们可以从HandleUnauthorizedRequest方法重定向到登录页面吗?

1 个答案:

答案 0 :(得分:0)

创建一个基础控制器,您可以在其上放置自定义授权属性。 类似的东西:

[YourAuthorizeAttribute]
public class BaseAuthorizeController : BaseController
{
    public BaseAuthorizeController() {}
}

以上内容将适用于您的所有操作,而不仅仅是ajax操作。 您可以通过为不需要新逻辑的操作传递布尔值false来扩展属性;

public class ClaimsAuthorizeAttribute : ActionFilterAttribute
{
    private readonly bool authorize = true;public YourAuthorizeAttribute(bool authorize = true)
    {
        this.authorize = authorize;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!authorize)
        {
            return;
        }

        // Your custom authentication logic
    }