使用表單身份驗證,使用非ajax請求,響應代碼是302重定向,客戶端瀏覽器重定向到默認登錄頁面account/logon
等。處理Ajax請求的超時登錄會話的最佳方式是什麼?
但是,如果一個正在一個Ajax請求,並登錄會話超時,也似乎在Ajax調用線程處理程序被賦予了302重定向,然後請求account/logon
等頁面,並將它作爲的responseXML
財產jqXHR
對象。 顯然,這樣的行爲有不必要的結果,即返回的登錄頁面不是一個典型的ajax調用請求的局部視圖,幷包含佈局頁眉,導航等佈局元素,然後我的javascript將此HTML插入到目標元素中,導致完整佈局效果內的完整佈局。
我目前僅僅通過檢查服務器上,對/account/logon
操作方法如果請求是一個Ajax請求,如果是返回一個局部視圖,這將是一個登錄表單思考解決這個的。這似乎或多或少的工作,但我似乎也無法設置響應代碼,以幫助我區分正常的內容數據返回一個已驗證的請求和登錄部分視圖的數據會話超時。我可以用一些黑客方式來做,但我只是想知道解決這個問題的正確/常規方式。也許我應該使用jqXHR的textStatus屬性來表明它是一個登錄表單,而不是使用狀態代碼來執行此操作,那麼如何爲ASP.NET中的jqHXR.textStatus設置值?
現在我想:
public ActionResult LogOn()
{
bool isAjaxCall = string.Equals("XMLHttpRequest", Request.Headers["x-requested-with"], StringComparison.OrdinalIgnoreCase);
if (isAjaxCall) { Response.StatusCode = 409; return PartialView("LogOnForAjaxView"); }
else return View();
}
$.post(path, function (data, textStatus, xhr) {
if(xhr.status != 409) $('#content-wrapper').html(data);
else // Present the form html, overlay it over the page content etc.
}
嗯,我只是應用了一個授權標誌給整個控制器,我很懶。如果整個控制器被標記爲[授權],是否將這個邏輯引入到所述操作方法中仍然有效? – LaserBeak