Asp.Net Cors在OPTIONS上返回标头,但不在GET请求上返回

时间:2019-02-21 03:11:31

标签: asp.net http cors owin

在.Net Mvc (非核心)项目中使用Microsoft.Owin.Cors,我在启动时配置cors,如下所示:

var cors = new CorsPolicy {
  AllowAnyHeader = true,
  SupportsCredentials = true,
};
cors.Origins.Add("http://localhost:3006");
cors.Methods.Add("GET");
cors.Methods.Add("POST");
cors.Methods.Add("PUT");
cors.Methods.Add("DELETE");
cors.Methods.Add("OPTIONS");
app.UseCors(new CorsOptions {
  PolicyProvider = new CorsPolicyProvider {
    PolicyResolver = ctx => Task.FromResult(cors)
  }
});

当我从本地主机上的站点进行跨域查询时:3006,我收到一个成功的OPTIONS预检请求,然后是一个成功但被阻止的GET请求。

OPTIONS followed by a blocked GET

查看回复时,我看到

access-control-allow-credentials: true
access-control-allow-headers: authorization
access-control-allow-origin: http://localhost:3006

在OPTIONS响应上,而不在GET上!

为什么不是呢?我需要什么才能使其正常工作?

1 个答案:

答案 0 :(得分:0)

因此,在整整一天插电之后,我终于开始工作了。我无法使用Owin处理程序使其正常工作。对我来说,提示是OPTIONS成功,但GET失败。

我怀疑在.Net Framework上,Mvc实际上发生在Owin管道之外,因为它直接连接到System.Web。虽然我确定有办法通过与web.config混淆来解决此问题,但在我的情况下,我确实仅 需要将CORS用于我的Web api处理的路由,因此切换到Microsoft.AspNet.WebApi.Cors做到了。