我有一個ASP.NET Web API應用程序運行在我的本地IIS實例上。 Web應用程序使用CORS進行配置。在Web API方法我打電話讀取類似:AJAX請求失敗時設置標題,但沒有它們成功
[POST("/API/{foo}/{bar}")]
public String DoSomething(String foo, String bar)
{
return "Hello, World!";
}
客戶端,我運行以下請求:
$.ajax({
url: "http://machine/API/Foo/Bar",
type: "POST",
success: function (data) {
console.log("Success: " + data);
},
error: function (xhr, status, message) {
console.log("Failure: " + status + ", " + message);
}
});
的Firefox 15.0.1中的相應控制檯日誌全文:
test.html (line 38)
POST http://machine/API/Foo/Bar
200 OK
112ms
jquery-1.7.2.js (line 8240)
Success: "Hello, World!"
當我訪問我的本地IIS服務器時以及在Visual Studio中訪問IIS Express開發實例的相應URL時,此功能完美無瑕。
$.ajax({
url: "http://machine/API/Foo/Bar",
type: "POST",
onBeforeSend: function (xhr, settings) {
xhr.setRequestHeader("A", "B");
},
success: function (data) {
console.log("Success: " + data);
},
error: function (xhr, status, message) {
console.log("Failure: " + status + ", " + message);
}
});
不斷如此詳細的日誌消息,我看到的是::
當我添加一個請求頭,任何東西,下面的請求時對我的本地IIS服務器做出失敗
Failure: error,
同樣的POST
在Visual Studio中針對IIS Express開發實例進行的請求是成功的。
在提琴手,前兩次請求都通過無故障,無論我是否針對Visual Studio中的完整的IIS服務器或IIS快遞:
// Request
POST http://machine/Foo/Bar HTTP/1.1
Host: machine
Content-Length: 0
// Response
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 38
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 09 Oct 2012 20:16:29 GMT
"Hello, World!"
的排列{With Headers, Without Headers} x {Full IIS, IIS Express}
都產生內提琴手相同的輸出。
簡而言之:爲什麼設置請求標頭會導致AJAX調用對我的本地完全成熟的IIS實例失敗?
此外,爲什麼我的請求在Fiddler中成功,但不是在我的Javascript代碼中?如果我無法在適當的IIS實例中設置請求標頭,這是一個嚴重的問題。
什麼是你通過所有這些方法?這應該是您收到您的成功(200)/失敗(500?)響應代碼的地方。你有沒有試過簡單地將這些值傳入一個始終以狀態碼200和真的響應的服務? – Jared
我設置了IIS Express和完整的IIS以在正在調用的Web API函數處設置斷點。當斷點失敗並出現Failure:error消息時,斷點不會被命中,它在IIS Express中調試時或在完整的IIS中沒有請求頭時會得到命中。 –