【问题标题】:AspNet5 beta8 preflight request from Firefox returns no element found Location: moz-nullprincipal来自 Firefox 的 AspNet5 beta8 预检请求返回未找到元素位置:moz-nullprincipal
【发布时间】:2016-02-20 20:02:54
【问题描述】:

我有一个 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)?

【问题讨论】:

    标签: asp.net-mvc firefox preflight


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-22
      • 2017-02-01
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      相关资源
      最近更新 更多