2011-12-03 65 views
0

希望你能提供幫助。在我的ASP.net MVC3應用程序中,我的所有控制器都從我創建的定製控制器中下來。MVC FormsAuthentication超時 - AJAX注意事項

在FormsAuthentication超時後,如果用戶試圖訪問任何頁面(標準功能),我的應用程序會正確地將用戶重定向到登錄頁面。

但是,對於Ajax.ActionLink和Ajax.BeginForm調用,它們只會返回任何內容,如果瀏覽器打開超過20分鐘,然後嘗試訪問Ajax鏈接,則會導致用戶混淆。

是否有任何代碼可以放入我的基本控制器中,這些代碼一般都能正常工作,以便當它檢測到入站Ajax調用並且超時時,它會按照預期將用戶重定向到登錄頁面?

我不介意以後它不會回到原來的頁面 - 只要進入首頁索引頁面就可以開心。

在此先感謝您提供的任何幫助。

Simon。

回答

4

您可以看看following blog post,它說明了防止FormsAuthentication模塊在AJAX請求的情況下重定向到登錄頁面的一種好方法,並且只需向客戶端發送401狀態碼,以便它可以相應地執行。

+0

嗨@Darin,謝謝你的回覆。實際上,這是我想要的相反行爲 - 我希望我的應用始終返回登錄頁面,而不管它是否是Ajax或常規呼叫。我不想在每次AJAX調用時都回應401,我希望它成爲我的基本控制器的標準行爲。而且由於Ajax表單通常在div中呈現頁面的一部分,我需要我的登錄表單成爲整頁重定向 - 不會顯示在div部分中。謝謝,西蒙。 – SimonGoldstone

+1

@Simon,事情是,當你使用AJAX,如果你的服務器沒有返回401狀態碼,你無法知道你是否被神重定向到登錄頁面(因爲會話過期),或者如果你得到正確的服務頁。在這兩種情況下,你會得到200個狀態碼和HTML。所以你不能相應地採取行動。如果您將服務器配置爲在過期會話的情況下返回401狀態代碼,則您將能夠在AJAX 401錯誤回調中使用'window.location.href',因爲您將知道會話過期並且只是將瀏覽器重定向到登錄頁。 –

+0

嗨達林,謝謝你的建議。我的下一個問題是,我怎樣才能默認設置這種行爲?我的字面上有數百個AJAX調用遍佈我的應用程序。我真的不希望在每一個手動處理這個情況。有沒有辦法設置這個默認行爲,也許使用JQuery? – SimonGoldstone