2012-11-12 65 views
3

我有一個ASP.NET MVC4子Web應用程序添加到現有的ASP.NET WebForm網站。整個網站正在使用forms authentication會話超時後Backbone Collection.fetch()

在我的MVC4客戶端,我使用Backbone.js來構建應用程序,而客戶端應用程序很可能是SPA。

一切工作正常,但會話超時後,我的應用程序不會重定向到登錄頁面。

我嘗試了Collection.fetch方法的錯誤回調,它在會話超時後嘗試讀取時觸發(這很好)。

但是,響應狀態碼是200(OK),響應內容是登錄頁面內容。

所以,我的問題是,在錯誤處理程序中,我怎麼知道回調是否由會話超時或任何其他意外錯誤觸發?

如果確定,我應該如何做,讓骨幹重定向頁面登錄頁面,而引用當前頁面?

回答

2

Here是什麼東西菲爾哈克已經從後在博客

Exceprts:

可能的解決方案

我要說的是,我周圍看到了一些可能的解決方案網站,然後呈現我喜歡的那個。這並不是說這些其他解決方案是錯誤的,但它們在某些情況下是正確的。

刪除窗體身份驗證

如果你不需要FormsAuth,一個簡單的解決方法是刪除窗體身份驗證模塊爲this post建議。如果您唯一的目的是使用ASP.NET來託管Web API服務,並且您不需要表單身份驗證,那麼這是一個很好的解決方案。但如果您的應用程序既是Web應用程序又是Web服務,它不是一個好的解決方案。

註冊一個HTTP模塊到重定向轉換爲401

This blog post建議註冊,其將任何302請求到401的HTTP模塊有兩個問題與這種方法。首先是它打破了重定向合法的情況,而不是FormsAuth的結果。第二個是它需要手動配置一個HttpModule。

安裝,包裝MembershipService.Mvc

我的同事史蒂夫·桑德森,與他MembershipService.Mvc和MembershipService.WebForms的NuGet包一個更好的辦法。這些包將ASP.NET Membership作爲可以從多個設備調用的服務公開。

從這個博客

的評論一些更多的信息,我們有同樣的問題。但是我們所做的就是掛鉤到AuthenticateRequest(就像你一樣),並且我們也檢查了請求以查看它是否是ajax(再次,就像你所做的那樣)。但是在這一點上,我們只是簡單地返回了一個JSON,如{location: 'http://www.domain.com/path-to-login-page'},我們只需用HTTP代碼200結束該方法中的響應。這樣,jQuery仍然會得到JSON結果。但是如果結果有一個「位置」屬性,我們只需做一個客戶端重定向到登錄頁面。這是我們的方式,它像一個魅力。

+0

感謝您的詳細解答和選項,我會嘗試您的建議併爲我找到合適的解決方案,如果有任何問題需要更新。 – Shuping