尝试从Web应用程序获取数据时出现Cors错误没有“ Access-Control-Allow-Origin” /没有HTTP正常状态

问题描述

我有前端代码,可以从ASP.NET Web App中获取一些数据。

      $.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;
        }
    }
}

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

CORS策略已阻止从来源“ http:// websiteURL”访问“ http:// serverURL”处的XMLHttpRequest:对预检请求的响应未通过访问控制检查:否“ Access-Control-Allow-来源的标头出现在请求的资源上。

我进行了一些挖掘,并尝试将其添加到Web应用程序的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>

但这只会给我带来其他错误

CORS策略已阻止从来源“ http:// websiteURL”访问“ http:// serverURL”处的XMLHttpRequest:对预检请求的响应未通过访问控制检查:它没有HTTP正常状态。

到目前为止,我不知道该如何解决。 Web应用程序在其他主机上移动时会更改行为,这令我感到奇怪。

解决方法

我想出了一个解决方案。问题出在IIS版本上,该版本在winServer2012R2上为8.5,无法在此OS版本上升级。出于某些原因,在IIS 8.5中会忽略代码中定义的标头,而我无法弄清楚如何在web.config中正确定义它们,在何处不忽略它们。 (这是发生第二个错误的原因)我只是将应用程序移到了其他服务器(winServer2019)上,并且现在可以正常工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...