Microsoft Owin Cors 允许所有无法在 Chrome for Web API 中工作

Posted

技术标签:

【中文标题】Microsoft Owin Cors 允许所有无法在 Chrome for Web API 中工作【英文标题】:Microsoft Owin Cors allow all not working in Chrome for Web API 【发布时间】:2018-06-04 20:24:43 【问题描述】:

我在调用 Web API 的 JS SPA 上创建了。我正在使用 CORS 允许使用标签“assembly: OwinStartup”和“app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);”对 Web Api 的所有请求

完成申请here

对于 Edge 请求是成功的,而在 Chrome 中则不是。我收到错误:无法加载https://localhost:44373/api/location?cityName=dc:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'https://localhost:44392'。

有趣的是,我在开发者工具中看不到任何“Access-Control-Allow-Origin”请求标头。

对于 Chrome:

:authority:localhost:44373 :方法:获取 :path:/api/location?cityName=dc :方案:https 接受:应用程序/json,文本/纯文本,/ 接受编码:gzip,放气,br 接受语言:en-US,en;q=0.9,bn;q=0.8 缓存控制:无缓存 来源:https://localhost:44392 杂注:无缓存 推荐人:https://localhost:44392/ 用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/63.0.3239.108 Safari/537.36

对于边缘:

接受:application/json、text/plain、/ 接受编码:gzip、deflate、peerdist 接受语言:en-US 主机:本地主机:44373 来源:https://localhost:44392 推荐人:https://localhost:44392/ 用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 X-P2P-PeerDist:版本=1.1 X-P2P-PeerDistEx:MinContentInformation=1.0,MaxContentInformation=2.0

我的启动页面看起来像this

【问题讨论】:

【参考方案1】:

你必须使用这行代码作为启动类的第一条语句--

 public void Configuration(IAppBuilder app)
    
        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
...
...
...

【讨论】:

我也用过。 [程序集:OwinStartup(typeof(LocationSvc.App_Start.StartUp))] 命名空间 LocationSvc.App_Start public class StartUp public void Configuration(IAppBuilder app) app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 【参考方案2】:

我猜测它在 Edge 中“工作”是因为它被检测到 localhost 并决定不进行 CORS 检查;但 Chrome 将始终进行检查。

无论如何,您没有看到标题,因为它不存在。要使其正常工作,请执行以下操作:

添加这 2 个包:Microsoft.AspNet.WebApi.OwinMicrosoft.Owin.Host.SystemWeb

global.asax 文件中注释掉GlobalConfiguration.Configure(WebApiConfig.Register);,因为我们想将OWIN 用于Web API。

Configuration() 替换为StartUp 中的此代码:

public void Configuration(IAppBuilder app)

    app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

    HttpConfiguration config = new HttpConfiguration();
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/controller/id",
        defaults: new  id = RouteParameter.Optional 
    );
    app.UseWebApi(config);

【讨论】:

嘿伙计.. 它完全有效.. 感谢@Balah 救了我的命 :)

以上是关于Microsoft Owin Cors 允许所有无法在 Chrome for Web API 中工作的主要内容,如果未能解决你的问题,请参考以下文章

app.UseCors 对哪个安全上下文有用

WebApi 上的 AngularJS 和 OWIN 身份验证

owin解决跨域js请求

WebApi使用Token(OAUTH 2.0方式)

在Owin中启用CORS

请求 OWIN 令牌时出现 CORS 错误