2012-11-14 47 views
0

我在asp.net MVC應用程序上使用表單身份驗證,我使用jQuery和ajax來創建豐富的用戶界面。有些用戶傾向於將頁面打開幾個小時,並且他們的登錄會話按預期過期。如果用戶單擊鏈接或重新加載頁面,則按預期方式返回登錄屏幕。如果他們點擊按鈕或觸發ajax調用,則ajax調用將返回登錄html,而不是預期的html或JASON結果。導致一個具有半個登錄屏幕的損壞頁面。擴展/重寫jquery.ajax.done函數來檢測.net登錄屏幕

由於我已經編寫了很多ajax調用,我認爲我可以擴展或覆蓋默認的.done事件,以在繼續處理我編程的任何事件之前添加對登錄屏幕的檢查。

,比如我有這樣的功能:

function CallAjax() { 
    $.ajax({type: "GET", url: "foo" }) 
    .done(function (data) { $('#result').val(data); }); 
} 

是可以覆蓋的.done默認實現等方面做了檢查,不重寫這個功能呢?我的支票可能會查看結果是否爲html響應,如果是這樣,請搜索「登錄」以查看其登錄頁面。

回答

0

我試過達林的建議,但經過幾個小時的努力,我無法讓它在我的設置中工作。

只是將其添加到在Global.asax

protected void Application_EndRequest() 
{ 
    var context = new HttpContextWrapper(this.Context); 

    if (FormsAuthentication.IsEnabled && 
     context.Response.StatusCode == 302 && 
     context.Request.IsAjaxRequest()) 
     { 
      context.Response.Clear(); 
      context.Response.StatusCode = 401; 
     } 
    } 
} 

http://jvance.com/blog/2012/09/21/FixFormsAuthentication302.xhtml

摘自:但是我碰到這裏面工作對我來說第一次,而簡單的解決方案絆倒
0

我建議您擴展ASP.NET窗體身份驗證模塊,如Phil Haack在this blog post中解釋的,以便在使用AJAX請求時不再重定向到登錄頁面,而是返回401 HTTP狀態碼。然後你可以簡單地使用.fail回調並攔截401狀態碼。在這種情況下將不會調用.done處理程序。