0

我從AuthorizeAttribute類派生並提出我自己的CustomAuthorize自定義[授權]阿賈克斯jQuery的過濾請求

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

創建一個您放置自定義授權屬性的基礎控制器。 喜歡的東西:

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

以上將被應用到你的所有行動,而不僅僅是阿賈克斯行動。 您可以通過爲不需要新邏輯的動作傳遞布爾值來擴展屬性;

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 
    } 
+0

現在無法添加基礎控制器,因爲這需要大量的重構。還有其他解決方案嗎?不能從HandleUnauthorizedRequest方法重定向嗎? – InTheWorldOfCodingApplications