提问者:小点点

Microsoft Owin Cors允许所有不在Chrome for Web API中工作的应用程序


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

在此完成申请

对于边缘请求是成功的,而在Chrome不是。我得到错误:未能加载https://localhost:44373/api/location?cityName=dc:请求的资源上不存在“访问控制允许源”标头。因此不允许访问源“https://localhost:44392”。

有趣的是,我无法在开发人员工具中看到两者的任何“访问控制-允许-起源”请求标头。

对于Chrome:

:权限:localhost:44373:方法:GET:路径:/api/位置?cityName=dc:方案:https接受:应用程序/json,文本/普通,/接受编码:gzip,缩小,br接受语言:en-US,en;q=0.9,bn;q=0.8缓存控制:无缓存来源:https://localhost:44392pragma:无缓存引用:https://localhost:44392/用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome /63.0.3239.108Safari /537.36

对于边缘:

Accept: application/json, text/plain, / Accept-Encoding: gzip, deflate, peerdist Accept-Language: en-US Host: localhost:44373 Origin: https://localhost:44392 Referer: https://localhost:44392/ User-Agent: 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: Version=1.1 X-P2P-PeerDistEx: MinContentInformation=1.0, MaxContentInformation=2.0

我的启动页面如下所示:


共2个答案

匿名用户

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

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

匿名用户

我对它在Edge中“工作”的猜测是因为它检测到本地主机并决定不进行CORS检查;但Chrome将始终进行检查。

无论如何,你看不到标题,因为它不在那里。要让它工作,请执行以下操作:

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

注释掉< code>GlobalConfiguration。配置(WebApiConfig。注册);从< code>global.asax文件中删除,因为我们希望将OWIN用于Web API。

在您的< code >启动中,用以下代码替换< code>Configuration():

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);
}