大家好,
我正在开发一个非常简单的Web API 2项目。但是,除非我将CORS配置文件放在web.config文件中,否则无法使其正常工作。我按照MSDN文章和这个ASP.NET文章上的说明操作,但似乎我漏掉了什么步骤。
Global.asax.cs
protected void Application_Start()
{
WebApiConfig.Register(GlobalConfiguration.Configuration);
}
WebApiConfig.cs
public static void Register(HttpConfiguration config)
{
config.EnableCors(new EnableCorsAttribute("*","*","*"));
config.MapHttpAttributeRoutes();
}
JavaScript
$.ajax({
url: '//myapidomain.com/buildings'
}).done(function (data) {
var theList = $('.buildings'),
theListHTML = "",
response = JSON.parse(data);
$.each(response.Buildings.Data, function () {
theListHTML += '<li>' + this.Description + '</li>';
});
theList.html(theListHTML);
});
我已经查看了几乎所有的Stack Overflow(例如这个)和MSDN论坛帖子(例如这个),据我所知,这应该是有效的。应用程序托管在运行4.0的IIS 8服务器上。
更新
看起来是请求本身的问题(或者说是IIS配置的问题)。如果我通过HTTP发送请求,它就会失败(没有发送回访问控制标头)。但是,如果我使用HTTPS请求,一切正常。
解决方案
我们的托管环境拦截了非HTTPS请求并强制将它们转换为HTTPS。当它这样做时,它会返回一个304,而jQuery的方法无法处理。解决方案要么是始终使用HTTPS发出请求(首选),要么自己处理此情况/找到处理此场景的替代库/插件。