CORS enabled but response for preflight has invalid HTTP status code 404 when POSTing JSON(已启用 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();
}
}
这篇关于已启用 CORS,但在 POST JSON 时,预检响应的 HTTP 状态代码 404 无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:已启用 CORS,但在 POST JSON 时,预检响应的 HTTP 状态代码 404 无效
基础教程推荐
- Electron 将 Node.js 和 Chromium 上下文结合起来意味着 2022-01-01
- 如何使用TypeScrip将固定承诺数组中的项设置为可选 2022-01-01
- Chart.js 在线性图表上拖动点 2022-01-01
- 自定义 XMLHttpRequest.prototype.open 2022-01-01
- html表格如何通过更改悬停边框来突出显示列? 2022-01-01
- Vue 3 – <过渡>渲染不能动画的非元素根节点 2022-01-01
- 如何使用JIT在顺风css中使用布局变体? 2022-01-01
- 我可以在浏览器中与Babel一起使用ES模块,而不捆绑我的代码吗? 2022-01-01
- 直接将值设置为滑块 2022-01-01
- 用于 Twitter 小部件宽度的 HTML/CSS 2022-01-01