已启用 CORS,但在 POST JSON 时,预检响应的 HTTP 状态代码 404 无效
我已经彻底搜索,但在我的特定情况下找不到此问题的解决方案.
I've searched thoroughly but cannot find a solution to this issue in my particular circumstance.
使用 Fiddler (POST) 的跨域服务调用正确执行并接收到数据.但是,通过浏览器 (Chrome) 我收到消息预检有无效的 HTTP 状态代码 404"
Cross-domain service calls using Fiddler (POST) execute correctly and the data is received. However, through the browser (Chrome) I am getting the message 'preflight has invalid HTTP status code 404'
我有一个 Web API 应用程序并安装了 CORS 并确保 web.config 文件中存在以下内容:
I have a Web API application and have installed CORS and ensured the following is present in the web.config file:
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
这里是 Ajax 调用:
Here is the Ajax call:
var secretKey = 'difusod7899sdfiertwe08wepifdfsodifyosey',
url = 'http://api.intrinsic.co.uk/api/v1/PTS/ActiveDrivers?api_key=098werolllfWnCbPGAuIXVOJidDHRfYcgxImMlxTXopuekXrSOqOWzEAIdeNTWGPQPpyHxgVGsFysGFKPzq';
jQuery.ajax ({
url: url,
type: "POST",
data: JSON.stringify({ secretKey: secretKey}),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(data){
var content = "<table class="container"><thead><tr><th>Driver Number</th><th>Timestamp</th><th>VRN</th><th>Latitude</th><th>Longitude</th><th>Track Link</th></tr></thead><tbody>";
$.each(data.ActiveDrivers.DriverLocationStatus, function (index, element) {
content += "<tr><td>" + element.DriverNumber + "</td>";
content += "<td>" + dateFormat(element.Timestamp, "d/m/yy") + " " + dateFormat(element.Timestamp, "h:MM TT") + "</td>";
content += "<td>" + element.VRN + "</td>";
content += "<td>" + element.CurrentLatitude + "</td>";
content += "<td>" + element.CurrentLongitude + "</td>";
content += "<td><a href="https://www.google.co.uk/maps/place//@" + element.CurrentLatitude + "," + element.CurrentLongitude + ",15z/" target='_blank'>Track »</a></td></tr>";
});
content += "</tbody></table>";
$( "#result" ).html( content );
}
});
显然,可以完美地在同一个域上运行,并且如上所述,它可以使用 Fiddler.
Obviously, works on the same domain perfectly and, as mentioned, it works using Fiddler.
我确定是浏览器的预检选项检查对于应用程序/json"的内容类型失败,但我不知道如何修复它.
I'm certain it is the browser's preflight OPTIONS check that is failing for content-type of 'application/json' but I'm not sure how to fix it.
web.config 文件中是否缺少我应该添加的内容?
Is there something missing in the web.config file that I should add?
我已尝试删除内容类型"而没有任何影响.
I have tried removing 'content-type' with no affect.
我曾希望这篇文章 可以解决问题(看起来很有希望),但遇到了同样的错误:
I had hoped this article would solve the issue (it seemed promising) but the same error is encountered:
XMLHttpRequest cannot load [URL]. Response for preflight has invalid HTTP status code 404
推荐答案
谢谢,但是在上述配置更改后出现405错误.
Thanks but getting 405 error,after the above config changes.
在 web api Global.asax 文件中添加以下代码后,它终于可以工作了
Finally it works after adding below code in web api Global.asax file
protected void Application_BeginRequest(Object sender, EventArgs e)
{
//HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
相关文章