Cors 错误(无 'Access-Control-Allow-Origin'/它没有 HTTP 正常状态。),当尝试从 Web 应用程序获取数据时

Cors Errors (No 'Access-Control-Allow-Origin' / It does not have HTTP ok status.), when trying to get data from web app

我得到了前端代码,它从我的 ASP.NET Web 应用程序中获取了一些数据。

      $.ajax({  
        url: http://webApiURL,  
        method: "GET",
        contentType: "application/json;odata=verbose",  
        headers: { "accept": "application/json;odata=verbose" },  
        success: function (data) {  
          new WorkTimer(data, "o365cs-nav-centerAlign"); //code that display data further in html
        }, 
      }); 

ASP.NET Web App 非常简单,我认为这里重要的代码是:

public class HPMController : ApiController
{
    [HttpGet]
    [ActionName("WorkTime")]
    public HttpResponseMessage GetWorkTime(string param)
    {
        using (HPMEntities db = new HPMEntities())
        {
            var answer = db.Database.SqlQuery<string>("HPM.dbo.someProcedure " + param).First();
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, answer);
            response.Headers.Add("Access-Control-Allow-Origin", "*");

            return response;
        }
    }
}

在我的开发计算机上一切正常,而且,只要 Web 应用程序托管在我的 IIS (win10) 上,它在我们 Intranet 中的其他计算机上也可以正常工作。但是当我将网络应用程序移动到服务器(winServer2012R2)时,浏览器出现错误:

Access to XMLHttpRequest at 'http://serverURL' from origin 'http://websiteURL' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我深入研究了一下,然后尝试将此添加到 web.config 的网络应用程序中:

<configuration>
  <system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Methods" value="*"/>
            <add name="Access-Control-Allow-Origin" value="*"/>
            <add name="Access-Control-Allow-Headers" value="*"/>
        </customHeaders>
    </httpProtocol>
</configuration>

但它只给我带来了其他错误:

Access to XMLHttpRequest at 'http://serverURL' from origin 'http://websiteURL' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

目前我不知道如何解决这个问题。 Web 应用程序在其他主机上移动时会改变行为,这对我来说很奇怪。

我找到了解决办法。问题出在 IIS 版本上,它在 winServer2012R2 上是 8.5,无法在此 OS 版本上升级。出于某种原因,代码中定义的 Headers 在 IIS 8.5 中被忽略,我无法弄清楚如何在 web.config 中正确定义它们,其中没有被忽略。 (这是发生第二个错误的原因)我只是将应用程序移到不同的服务器(winServer2019)上,它现在可以工作了。