2016-05-18 80 views
1

我們正在爲AngularJS開發用於前端和C#.NET的後端休息服務應用程序。 我們使用Windows身份驗證進行域名登錄。我們使用actionContext.RequestContext.Principal.Identity來檢索瀏覽器發送的用戶。 除了當我們做註銷時,工作正常,迫使瀏覽器向用戶提出新的憑據。用戶發回新的憑證,從這裏開始,對於使用AngularJS $ http完成的每個XHR請求,一些請求會在actionContext.RequestContext.Principal.Identity上發送新的憑證,但其他請求會發送舊憑證,好像它們被緩存在瀏覽器。我們試圖刷新頁面,但問題仍然存在。我們相信它發生在Chrome中,但不在IE中。Chrome,WIndows身份驗證和XHR

感謝您的幫助。

回答

0

$ HTTP有一個選項高速緩存可以將其設置爲false:

$http.get(url, {cache:false}) 

從文檔:

緩存$ HTTP響應不是默認緩存。要啓用緩存,您必須將config.cache值或默認緩存值設置爲TRUE或緩存對象(使用$ cacheFactory創建)。如果定義了 ,則config.cache的值優先於默認的 緩存值。

爲:

緩存中的所有迴應 - 設置默認的緩存值設置爲TRUE或到 緩存對象緩存具體的迴應 - config.cache的值設置爲TRUE 或緩存對象如果緩存啓用,但 默認緩存和config.cache都不設置爲緩存對象,則使用默認的$ cacheFactory($ http)對象 。

可通過更新 $ http.defaults.cache屬性或$ httpProvider.defaults.cache 屬性來設置默認緩存值。

啓用緩存時,$ http使用相關緩存對象存儲來自服務器 的響應。下一次發出相同請求 時,響應將從緩存中返回,而不會向服務器發送 請求。

請注意:

只有GET和JSONP請求被緩存。緩存密鑰是包含搜索參數的請求 URL;標題不被考慮。高速緩存的 響應是異步返回的,與服務器響應 的方式相同。如果使用 相同的高速緩存(尚未填充)發出多個相同的請求,則會向服務器發出一個請求 ,其餘請求將返回相同的響應。響應中的緩存控制標頭不會影響是否緩存或如何緩存響應。

+0

似乎這不是問題,因爲我們沒有使用cache = true。實際上,服務器收到請求(所以它沒有被緩存),但問題在於發送瀏覽器到服務器的請求數據。不管怎麼說,還是要謝謝你! –

+0

然後問題是舊的證書沒有被釋放,指令或者任何負責這個的東西都不會被銷燬。所以它會記住舊的憑據。你能發表一些關於你如何做的代碼嗎? – MayK

+0

但我不銷燬指令和所有的頁面刷新JS實例? –