两台不同服务器上Angular2和WebAPI应用程序之间的CORS问题

两台不同服务器上Angular2和WebAPI应用程序之间的CORS问题,cors,asp.net-web-api2,Cors,Asp.net Web Api2,当我的Angular2应用程序在我自己的机器上运行,但WebAPI应用程序在web服务器上的IIS上运行时,我遇到了Angular2应用程序和WebAPI应用程序之间的CORS问题。有趣的是,如果我在自己的机器上运行这两个应用程序,一切都会正常工作 我在Chrome中遇到以下错误:- 无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”。响应的HTTP状态代码为401 我已经在WebAPI应用程序中安装了C

当我的Angular2应用程序在我自己的机器上运行,但WebAPI应用程序在web服务器上的IIS上运行时,我遇到了Angular2应用程序和WebAPI应用程序之间的CORS问题。有趣的是,如果我在自己的机器上运行这两个应用程序,一切都会正常工作

我在Chrome中遇到以下错误:-

无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”。响应的HTTP状态代码为401

我已经在WebAPI应用程序中安装了CORS nuget包,并使用

            var attrib = new EnableCorsAttribute("*", "*", "*") {SupportsCredentials = true};
        config.EnableCors(attrib);
我还在Global.asax.cs文件中添加了以下代码:-

        protected void Application_BeginRequest()
    {
        if (Request.HttpMethod == "OPTIONS")
        {
            string header = Request.Headers.GetValues("Origin")[0];

            Response.StatusCode = (int)HttpStatusCode.OK;
            Response.AppendHeader("Access-Control-Allow-Origin", header);
            Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
            Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
            Response.AppendHeader("Access-Control-Allow-Credentials", "true");
            Response.End();
        }
    }
但是没有用。有人能帮忙吗

请注意,如果我删除代码以启用CORS,而是将以下设置添加到我的Web.config中,则在本地运行所有内容时会出现此错误:-

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD, OPTIONS" />
    <add name="Access-Control-Allow-Credentials" value="true"/>
    <add name="Access-Control-Allow-Headers" value="X-Requested-With, origin, content-type, accept" />
  </customHeaders>
</httpProtocol>


谢谢

我通过将Authorize属性添加到我从Angular2调用的两个控制器中,成功地解决了这个问题。通过在Angular2应用程序的http调用中使用withCredentials,我还必须在控制器上添加Authorize属性,以使其正常工作。我还必须在IIS上启用匿名身份验证以及集成的/Windows身份验证,以使其能够正常工作