json - 已启用 CORS,但在 POST JSON 时,预检响应的 HTTP 状态代码 404

我已经彻底搜索,但在我的特定情况下找不到此问题的解决方案。

使用 Fiddler (POST) 的跨域服务调用正确执行并接收到数据。但是,通过浏览器 (Chrome) 我收到消息“预检有无效的 HTTP 状态代码 404”

我有一个 Web API 应用程序并安装了 CORS 并确保 web.config 文件中存在以下内容:

<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 调用:

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 &raquo;</a></td></tr>";
          });
          content += "</tbody></table>";
          $( "#result" ).html( content );
      }
  });

显然,可以完美地在同一个域上运行,并且如上所述,它可以使用 Fiddler。

我确定是浏览器的预检选项检查对于“应用程序/json”的内容类型失败,但我不知道如何修复它。

web.config 文件中是否缺少我应该添加的内容?

我已尝试删除“内容类型”而没有任何影响。

我曾希望 this article可以解决问题(看起来很有希望),但遇到了同样的错误:

XMLHttpRequest cannot load [URL]. Response for preflight has invalid HTTP status code 404

最佳答案

谢谢,但在上述配置更改后出现 405 错误。

在 web api Global.asax 文件中添加以下代码后,它终于可以工作了

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();
        }
    }

关于json - 已启用 CORS,但在 POST JSON 时,预检响应的 HTTP 状态代码 404 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36258959/

相关文章:

php - 在 php 中创建嵌套的 JSON 对象?

java - 如何在 JAVA 中对 JSONArray 进行排序

javascript - 从 JSON 对象中删除键值对

c# - 在 C# 中解析 Json rest api 响应

javascript - 如何在 javascript/jquery 中构建 json 字符串?

javascript - 来自json对象的Angular.js格式日期

ruby-on-rails - 如何将 JBuilder View 的 JSON 表示形式呈现为字符

json - 如何使用 Powershell 将 JSON 对象保存到文件中?

javascript - jQuery:在继续之前可以等待 $.get 完成加载吗?

c++ - JSONCPP 写入文件