0

我有一个 AspNet5 beta8 网站 mydomain.com:80 和在 mydomain.com:81 上运行的 api。只有端口不同。我确实配置了 Cors,它在 IE11 和 Chrome 中运行良好。不幸的是,我无法让它在 Firefox 42 版中运行。

不同之处在于 Firefox 在预检请求期间请求的内容类型:

Firefox: OPTIONS 204 No Content, Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

api 在 OPTIONS 响应中用 json 回复。紧随其后的是

GET 404 Not found. XML Parsing Error: no element found Location: moz-nullprincipal:{15a3ffbb-ab25-4adc-a332-fe52135c1fa6} Line Number 1, Column 1:

我假设是因为 Firefox 得到了 json 而不是 XML 并且生气了。

Chrome 和 IE11 都可以正常工作,因为它们在预检请求期间接受任何内容类型:

OPTIONS 204 No Content, Accept */* followed by GET results in status 200 OK.

因为 AspNet5 默认不包含 XML 序列化器/格式化器,

我试图像这样将它添加到api中:

services.AddMvc().AddXmlDataContractSerializerFormatters();

不幸的是,这不会导致 xml 响应来自 Firefox 的预检请求。Api 始终发送 json。我还尝试设置以下内容:

services.Configure<MvcOptions>(
    options =>
    {
        options.RespectBrowserAcceptHeader = true;
    });

也没有运气......

如何强制 api 使用 xml 回复来自 Firefox 的预检请求或强制 Firefox 以编程方式在 OPTIONS 请求中请求 json(我在客户端使用 Angular)?

4

1 回答 1

0

我找到了基于 XDomain javascript 库的解决方案,可从此处获得: https ://github.com/jpillara/xdomain

它可以很容易地与 Angular 集成,完全在 javascript 中处理 CORS 并禁用浏览器中的预检请求(使用 IE11、Chrome 和 Firefox 42 测试)。

使用 xdomain 加载网站更快,因为没有预检请求的开销。

于 2015-11-18T23:36:08.250 回答