Asp.net-Mvc-2

ASP.NET MVC 授權屬性在使用者未授權時執行 302 重定向

  • January 25, 2018

MSDN 明確表示它應該執行 401 重定向,但我在 FF 上得到了 302 重定向,這導致 AJAX 請求出現問題,因為返回的狀態為 200(來自重定向頁面)。

http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx

我發現其他人有同樣的問題: http: //blog.nvise.com/ ?p=26

除了他的,還有其他解決方案嗎?

Authorize 屬性確實返回 Http 401 Unauthorized 響應。不幸的是,如果您啟用了 FormsAuthentication,401 會被 FormsAuthenticationModule 攔截,然後執行重定向到登錄頁面 - 然後將 Http 200(和登錄頁面)返回給您的 ajax 請求。

最好的選擇是編寫自己的授權屬性,然後如果你收到一個未經身份驗證的請求,它也是一個 Ajax 請求,返回一個不同的 Http 狀態程式碼 - 比如 403 - 它不會被 formsAuthenticationModule 擷取,你​​可以在你的 Ajax 中擷取方法。

我真的很喜歡這個解決方案。通過將 ajax 請求的 302 響應更改為 401,它允許您在客戶端設置 ajax 以監視任何尋找 401 的 ajax 請求,如果找到一個重定向到登錄頁面。非常簡單有效。

全球.asax:

protected void Application_EndRequest()
{
   if (Context.Response.StatusCode == 302 &&
       Context.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
   {
       Context.Response.Clear();
       Context.Response.StatusCode = 401;
   }
}

客戶端程式碼:

$(function () {
     $.ajaxSetup({
       statusCode: {
         401: function () {
           location.href = '/Logon.aspx?ReturnUrl=' + location.pathname;
         }
       }
     });
   });

引用自:https://stackoverflow.com/questions/3978334