2015-06-14 56 views
3

這真的很奇怪。飛行前選項有400錯誤基於OWIN的WebAPI的CORS令牌請求

我試圖向WebAPI2(基於OWIN)發出CORS請求以獲取身份驗證令牌。

它每隔一段時間都會失敗。像第一個請求失敗,但第二個請求將通過。第三次失敗,但第四次將通過。

我不明白爲什麼它工作了一半的時間。

我檢查瀏覽器請求(chrome)。

失敗的人總是選擇OPTIONS方法。一個經歷通過POST。

但我始終使用POST方法與標頭的內容類型「:「應用程序/ X WWW的形式,進行了urlencoded」

所以我想的問題是,爲什麼有時鍍鉻/火狐狸發送預檢請求,但有時它沒有。

順便說一句,它在IE中完全正常工作。

+0

我有完全相同的問題,你是否對此有任何結論? – Marcus

回答

1

Chrome和FireFox都使用預檢選項請求是正確的。因此,在執行POST之前,Chrome/FireFox會使用OPTIONS動詞發送請求。如果它沒有收到服務器返回的響應,告訴瀏覽器允許發送跨域請求,那麼您將收到錯誤,並且後續POST不會發布。

您必須啓用你的web.config選項(或使用本文中列出的方法之一): http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

對於web.config中嘗試:

<httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS,PUT"/> 
     <add name="Access-Control-Allow-Headers" value="Content-Type, Accept"/>    
     </customHeaders> 

IE一直緩慢在採用CORS標準時,所以這就是爲什麼沒有啓用OPTIONS的情況下IE工作正常。

+0

好吧,問題是它在以下請求中起作用。爲什麼? – maxisam

+0

沒有看到你如何實施CORS,很難回答。 –