将正确的标头值发送到从角$ http到asp.net webapi的Preflight请求时出错

时间:2015-10-19 06:16:42

标签: c# angularjs asp.net-web-api xmlhttprequest cors

我正在尝试使用angular' $ http将身份验证数据发送到后端网络API。当我添加以下行时,浏览器开始发送预检请求

$http.defaults.headers.common.Authorization = 'Basic xxxxyyyyyy' ;

从网络API方面,当我通过OPTIONS方法获得请求时,我按如下方式处理:

if (request.Method == HttpMethod.Options && request.Headers.Any(k => k.Key.Contains("Origin")))
            {
                var response = new HttpResponseMessage(HttpStatusCode.OK);
                response.Headers.Add("Access-Control-Allow-Headers", "Content-Type,X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5,  Date, X-Api-Version, X-File-Name");
                response.Headers.Add("Access-Control-Allow-Origin", request.Headers.GetValues("Origin"));
                response.Headers.Add("Access-Control-Allow-Credentials", "true");
                response.Headers.Add("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS");
                var tsc = new TaskCompletionSource<HttpResponseMessage>();
                tsc.SetResult(response);
                return tsc.Task;  
            }

但是预检请求无法进行访问控制检查。

  

XMLHttpRequest无法加载http://localhost:53024/api .............   对预检请求的响应没有通过访问控制检查:   &#39;访问控制允许来源&#39;标头包含多个值   &#39; http://localhost:9000,*&#39;,但只允许一个。起源   &#39; http://localhost:9000&#39;因此不允许访问。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

“Access-Control-Allow-Origin标头包含多个值”错误解决方案在此link中给出。请试一试。

希望这有帮助!

答案 1 :(得分:3)

我遇到了同样的问题,这是由网络配置设置引起的:

<httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, Cache-Control" />
        <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,OPTIONS" />
      </customHeaders>
 </httpProtocol>

删除Access-Control-Allow-Origin自定义标头将解决此问题