我有两个网站在运行。经典WebAPI服务器和angular4客户端。 我有CORS在服务器上工作。我知道CORS不适用于chrome,除非你启动Chrome并关闭localhost的安全性。当我这样做时一切正常。
但我理解当我将localhost移到某个站点时(该站点确实使用了端口号。看起来像http://mytest:8080/info)Chrome可以正常工作。但我有同样的问题,我得到401(未经授权)。
它适用于IE没有问题,如果我运行chrome与安全关闭它也可以。
更新:
像这样固定:
在服务器上我做了自定义标题(在web.config中)
<customHeaders>
<add name="Access-Control-Allow-Headers" value="X-AspNet-Version,X-Powered-By,Date,Server,Accept,Accept-Encoding,Accept-Language,Cache-Control,Connection,Content-Length,Content-Type,Host,Origin,Pragma,Referer,User-Agent" />
<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
在Global.aspx.cs中我有
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
var corsAttr = new EnableCorsAttribute("http://{serveraddress}:8420", "*", "*");
config.EnableCors(corsAttr);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
在客户端网站上我做了像
这样的调用var options = new RequestOptions({
headers: new Headers({
'Accept': 'application/json',
}),
withCredentials: true
});
return this.http.get(this.apiAddress + '/api/user', options)
.map(res => res.json() as user);
}