我派生自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方法重定向到登录页面吗?
答案 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
}