Web API 2 - CORS 仅适用于 HTTPS(不适用于 HTTP)

Joe*_*zel 6 c# cors asp.net-web-api iis-8

全部,

我正在开发一个非常简单的 Web API 2 项目。由于某种原因,我无法让 CORS 正常工作,除非我将其放入 web.config 文件中。我按照MSDN 文章和这篇ASP.NET 文章中的说明进行操作,但我一定遗漏了一些东西。

全局.asax.cs

protected void Application_Start()
{
    WebApiConfig.Register(GlobalConfiguration.Configuration);
}
Run Code Online (Sandbox Code Playgroud)

WebApiConfig.cs

public static void Register(HttpConfiguration config)
{
    config.EnableCors(new EnableCorsAttribute("*","*","*"));

    config.MapHttpAttributeRoutes();
}
Run Code Online (Sandbox Code Playgroud)

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);
    });
Run Code Online (Sandbox Code Playgroud)

我已经查看了几乎每一个 Stack Overflow(例如这个)和 MSDN 论坛帖子(例如这个),据我所知,这应该有效。该应用程序托管在运行 4.0 的 IIS 8 服务器上。

更新

它似乎与请求本身(或者更确切地说是 IIS 配置)有关。如果我通过 HTTP 发送请求,则会失败(不会发回访问控制标头)。但是,如果我通过 HTTPS 请求,则一切正常。

解决方案

我们的托管环境拦截非 HTTPS 请求并强制它们使用 HTTPS。当它执行此操作时,它会返回 304,jQuery 的方法不知道如何处理该错误。解决方案是要么始终通过 HTTPS 发出请求(首选),要么自己处理这种情况/找到处理这种情况的替代库/插件。

Joe*_*zel 0

解决方案

我们的托管环境拦截非 HTTPS 请求并强制它们使用 HTTPS。当它执行此操作时,它会返回 304,jQuery 的方法不知道如何处理该错误。解决方案是要么始终通过 HTTPS 发出请求(首选),要么自己处理这种情况/找到处理这种情况的替代库/插件。