我有Angular2和ASP MVC休息服务器的休息应用程序,我有通信问题。 当我发送get时,我收到此错误:
否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://localhost:4200'因此不允许访问。
当我添加Access-Control-Allow-Origin请求时,我收到此错误:
对预检请求的响应没有通过访问控制检查:否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://localhost:4200'因此不允许访问。响应的HTTP状态代码为404.
这是我的代码:
let headers = new Headers({ 'Access-Control-Allow-Origin': '*' })
this.http.get("http://localhost/App/Users", { withCredentials: true, headers: headers })
.subscribe(response => {
console.log("A");
}, error => {
console.log(error);
});
在web.config中启用Windows身份验证。 哪里有问题?
答案 0 :(得分:2)
这里的问题似乎是CORS。当您使用localhost时,您的angular和WebAPI使用不同的端口。 (看起来他们是两个不同的项目)。 要解决此问题,您可以使用“Install-Package Microsoft.AspNet.WebApi.Cors”安装nuget软件包,然后在WebApiConfig文件中,您可以简单地说“config.EnableCors()”。现在你要暴露给角度部分的API,必须告诉它应该在那里使用CORS。因此,您可以将属性放在控制器上,提及原点,标题和方法。之后应该可以正常工作。 有关更多参考,请查看此链接, https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api
答案 1 :(得分:0)
在服务器端启用了cors添加后:
corsAttr.SupportsCredentials = true;
在Application_Start的MVC .net上类似
var corsAttr = new EnableCorsAttribute("http://localhost:4200,http://domain1,http://domain2", "*", "*");
// Enable withCredentials
corsAttr.SupportsCredentials = true;
config.EnableCors(corsAttr);