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.Owin 和 Microsoft.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 中工作的主要内容,如果未能解决你的问题,请参考以下文章