Web API 2-CORS仅通过HTTPS(而不是HTTP)工作

本文关键字:HTTP 工作 HTTPS 2-CORS API Web | 更新日期: 2023-09-27 17:59:04

全部,

我正在处理一个非常简单的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(首选)发出请求,要么自己处理这种情况/找到一个处理这种情况的替代库/插件。

Web API 2-CORS仅通过HTTPS(而不是HTTP)工作

解决方案

我们的托管环境拦截了非HTTPS请求,并将它们强制为HTTPS。当它这样做时,它返回一个304,jQuery的方法不知道如何处理。解决方案要么总是通过HTTPS(首选)发出请求,要么自己处理这种情况/找到一个处理这种情况的替代库/插件。