2013-12-12 90 views
1

我的主要目標是瞭解在使用ajax和asp.net web api後端的客戶端(瀏覽器)之間的授權過程中究竟發生了什麼。jquery ajax未授權請求,返回「NetworkError」和狀態0

所以最初,我通過Ajax從我的瀏覽器向我的一個控制器(允許「Access-Control-Allow-Origin」)發出一個簡單的GET請求。我採取我想要的迴應,一切都很好。

然後,我在web api上的同一個控制器上設置了一個授權屬性,然後再次創建一個簡單的GET請求來研究結果。所以,在螢火蟲的幫助下,我看到有一個「NetworkError:401 Unauthorized - localhost/api/values」。

此外,在結果對象上,我看到以下值:readyState:0,responseText:「」,status:0,statusText:「error」。這是正常的嗎?我不應該看到例如狀態:401? 我想我可以使用此線程的公認解決方案:Unauthorized AJAX request succeeds 但我更願意更嚴格地檢查潛在的401結果。

我以爲可能默認使用asp.net web API時,當您使用authorize屬性時,未經授權的響應不包含「Access-Control-Allow-Origin」標題,所以我添加了在全局範圍內有一個自定義的動作過濾器,它在每個響應中都加入了「Access-Control-Allow-Origin」,但它並沒有解決我的問題,所以我猜測事實並非如此。

回答

2

我找到了解決方案。我對導致此問題的假設最終證明是準確的。當未經授權的請求到達需要授權的控制器時(使用授權屬性),那麼響應中不包括頭「Access-Control-Allow-Origin」。因此,客戶端上的jqXHR的狀態是0而不是401.

因此,我將「Access-Control-Allow-Origin」添加到了asp.net web api Web.config,並最終正常工作。