我在调用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
我的启动页面如下所示:
你必须用这行代码作为启动类的第一条语句-
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);
}