带有Angular2的ASP MVC Web api - Http头访问控制

时间:2017-06-30 05:43:31

标签: angularjs asp.net-mvc asp.net-web-api

我有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身份验证。 哪里有问题?

2 个答案:

答案 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);