Angular 4应用程序和MVC WebAPI之间的PUT请求出现CORS错误

Angular 4应用程序和MVC WebAPI之间的PUT请求出现CORS错误,angular,asp.net-web-api,cors,Angular,Asp.net Web Api,Cors,我试图找出是什么导致了angular应用程序和MVCWebAPI应用程序之间的问题 在我的webapiconfig.cs中,我正在启用CORS,如下所示: var corsAttr = new EnableCorsAttribute("http://localhost:4200,http://domain1,http://domain2", "*", "*"); corsAttr.SupportsCredentials = true; // Enable CORS Globally conf

我试图找出是什么导致了angular应用程序和MVCWebAPI应用程序之间的问题

在我的
webapiconfig.cs
中,我正在启用CORS,如下所示:

var corsAttr = new EnableCorsAttribute("http://localhost:4200,http://domain1,http://domain2", "*", "*");
corsAttr.SupportsCredentials = true;

// Enable CORS Globally 
config.EnableCors(corsAttr);
我正在使用以下方式执行PUT请求:

updateExchange(exchange: IOrder): Observable<IOrder> {
  return this._http.put<IOrder>(this._orderServiceUrl + '/' + order.Id, order)
    .do(this.handleSuccessResponse)
    .catch(this.handleErrorResponse);
}
updateExchange(交换:IOrder):可观察{
返回此._http.put(此._orderServiceUrl+'/'+order.Id,order)
.do(此.handleSuccessResponse)
.接住(这个.把手错误响应);
}
我不确定这是否重要,但在我的请求中,我有时会根据错误返回不同的状态代码

对飞行前请求的响应未通过访问控制检查: 响应中“Access Control Allow Origin”标头的值必须为 当请求的凭据模式为时,不能为通配符“*” “包括”。因此,不允许使用源“” 通道由发起的请求的凭据模式 XMLHttpRequest由withCredentials属性控制

我获得了成功的响应,但在响应标题中,我没有看到任何CORS标题:

    Cache-Control:private
    Date:Mon, 02 Oct 2017 15:37:31 GMT
    Server:Microsoft-IIS/10.0
    Transfer-Encoding:chunked
    X-AspNet-Version:4.0.30319
    X-Powered-By:ASP.NET
    X-SourceFiles:=?UTF-8?<something>
缓存控制:专用
日期:2017年10月2日星期一15:37:31 GMT
服务器:Microsoft IIS/10.0
传输编码:分块
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?

关于如何使其工作的任何建议?

响应应仅在Access Control Allow headers中包含接受的头,不要使用通配符。这涉及到安全问题,这就是为什么会出现错误


请参阅中的答案,以了解有关为什么这是一种不好的做法的更多信息。这是一篇angular.js文章,但是CORS方面适用于搜索你的代码,也许你添加了两次标题,这就是我所遇到的

我们做到了

var corsAttr = new EnableCorsAttribute("http://localhost:4200,http://domain1,http://domain2", "*", "*");
corsAttr.SupportsCredentials = true;
config.EnableCors(corsAttr);
在另一个地方:

        With filterContext.RequestContext.HttpContext.Response
            .AddHeader("Access-Control-Allow-Origin", "*");
            .AddHeader("Access-Control-Allow-Methods", "*");
            .AddHeader("Access-Control-Allow-Headers", "*");
        End With

我在那里有一个通配符的原因是b/c,否则我会得到错误:服务器无法在发送HTTP头后设置状态。顺便说一句,从附在其中一个答案上的文档中,我看到的只是关于源,现在是头的问题。无论哪种方式,这里的问题是响应头根本没有任何头,即使所有内容都是根据ms文档指定的(或者我遗漏了一些内容)。好吧,嗯。这不可能是对的,你可以发布更多的代码吗?你看过这篇文章了吗,没关系,我只是发现:当我们第一次出于任何原因设置这个API时,有一个代码可以刷新选项请求的标题(设置它的人不记得为什么)。出于任何原因,它不会为get复制标题,而是为post和put复制标题。我碰巧为那个API写了第一个Put请求。我删除了那个代码,现在看起来很好。虽然这篇文章不对,但它让我的思想朝着正确的方向流动。很高兴你能理解