我得到了前端代码,它从我的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应用程序非常简单,我认为这里的代码是:
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中的其他计算机上也很好。但当我将web应用程序移动到服务器(winServer2012R2(时,我在浏览器中出现错误:
访问'XMLHttpRequesthttp://serverURL'来自原点'http://websiteURL'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在"access control Allow Origin"标头。
我挖掘了一点,并尝试将以下内容添加到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>
但它只给我带来了另一个错误:
访问'XMLHttpRequesthttp://serverURL'来自原点'http://websiteURL'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:它没有HTTP正常状态。
到目前为止,我不知道如何解决这个问题。当网络应用程序在其他主机上移动时,它会改变行为,这对我来说很奇怪。
我找到了一个解决方案。IIS版本存在问题,该版本在winServer2012R2上为8.5,无法在此操作系统版本上升级。由于某些原因,代码中定义的Header在IIS 8.5中被忽略,我不知道如何在web.config中正确定义它们,其中没有被忽略。(这就是出现第二个错误的原因(我只是简单地将应用程序移动到不同的服务器(winServer2019(上,它现在就可以工作了。