我有一個ASP.NET MVC 5項目,其中一個頁面有一些JavaScript調用運行ASP.NET WebApi項目的服務器上的API。這兩個項目通常在不同的域上運行,但在本地它們只在localhost
的不同端口上運行。此JavaScript正在發出GET
請求,但是當我觀看網絡日誌時,將發出OPTIONS
請求,而WebApi返回405 Method Not Authorized
。爲什麼我的ASP.NET MVC站點中的這個AJAX請求觸發了預檢檢查?
從我的研究,我知道this is a "preflight" check that is sometimes triggered for AJAX calls,我知道ASP.NET WebApi doesn't support OPTIONS
by default,所以這就是爲什麼我得到了405。但是,the preflight check is supposed to be skipped when certain conditions are met,這些條件已經在這裏得到滿足。你自己看;下面是JS代碼爲AJAX請求(匿名)全部:
var xmlhttp = new XMLHttpRequest();
var url = "http://localhost:12345/api/SomeAction?someArg=" + someArg;
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
// [snip], process the result here
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
爲什麼這個簡單的請求觸發預檢檢查?
你也應該將此作爲一個問題發佈在AI javascript sdk https://github.com/Microsoft/ApplicationInsights-JS/issues上。我不知道爲什麼AI的存在會迫使瀏覽器進行CORS檢查。 –
@JohnGardner:我沒有在那裏發佈一個問題,因爲我不認爲它是一個錯誤,只是一個不幸的副作用。我相信這是AI添加的自定義標題,強制執行預檢檢查(請參閱我在答案中鏈接到的GitHub上的文件)。如果你認爲它實際上是一個錯誤,請告訴我,我可以開一個問題。 –