来自Firefox的AspNet5 beta8预检请求未返回找到的元素位置:moz-nullprincipal

时间:2015-11-18 21:44:41

标签: asp.net-mvc firefox preflight

我有一个AspNet5 beta8网站mydomain.com:80和api在mydomain.com:81上运行。 只有端口不同。我确实配置了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();

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

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

没有运气......

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

1 个答案:

答案 0 :(得分:0)

我找到了基于XDomain javascript库的解决方案,可以从这里找到: https://github.com/jpillora/xdomain

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

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