Web API 2 - CORS只能在HTTPS上工作(而非HTTP)

6

大家好,

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

你能给我提供那篇MSDN文章的链接吗? - Jasen
@Jasen - 我已经更新了原始帖子,并附上了我阅读的文章和其他帖子的链接,以尝试解决问题。 - Joel Kinzel
@Jasen - 是的,这并不改变错误。 - Joel Kinzel
你是从网站上运行客户端页面的吗?还是直接打开HTML文件(错误信息是这样说的)? - hazjack
@haz - 我只有一个简单的HTML文件在不同的域上,它通过AJAX调用(如上所示)到我的API。错误出现在我的浏览器控制台中。我不太清楚你的问题是什么? - Joel Kinzel
显示剩余9条评论
1个回答

0

解决方案

我们的托管环境拦截了非 HTTPS 请求并强制将其转换为 HTTPS。当它这样做时,会返回一个 304 状态码,而 jQuery 的方法不知道如何处理。解决方案是要么始终通过 HTTPS 发送请求(首选),要么自己处理此情况/查找另一种库/插件来处理此场景。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接