被CORS策略阻止:在飞行前响应中,Access-Control-Allow-Headers不允许请求标头字段授权

时间:2019-04-26 14:40:37

标签: asp.net ajax asp.net-web-api cors

我有一个网站1和一个Web API 2 我的Web API有一个方法名称

 public string Index()
        {
            return "Hello world from site 2";
        } 

在控制器中的值。 我从网站1那样调用我的API

$.ajax({
            url: relativeUrl,
            headers: { "Authorization": "Bearer " + accessToken },
            type: "GET"
        })
            .done(function (result) {
                console.log("Result: " + result);
                alert(result);
            })
            .fail(function (result) {
                console.log("Error: " + result.statusText);
                alert(result.statusText);
            });

但是我的js控制台出现以下错误。

  

从来源“网站1”访问“ Web API 2”处的XMLHttpRequest具有   被CORS策略阻止:请求标头字段授权未获得   在访问前响应中被Access-Control-Allow-Headers允许。

我添加了我的控制器:

[EnableCors(origins: "*", headers: "*", methods: "*", exposedHeaders: "X-Custom-Header")]

在我的WebAPIConfig.cs

config.EnableCors();

在我的Web.config中

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

但是即使我仍然有错误,我也不明白我需要添加什么以及在哪里添加。

2 个答案:

答案 0 :(得分:1)

你有

<add name="Access-Control-Allow-Headers" value="Content-Type" />

headers: { "Authorization": "Bearer " + accessToken },

换句话说,访问控制设置仅允许“内容类型”标头,但是您的请求正在发送“授权”标头。显然,这两件事是不匹配的。

错误非常清楚地告诉您,Access-Control-Allow-Headers响应标头不允许“授权”请求标头。

尝试

<add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" />

相反。

P.S。我认为您不需要同时使用web.config设置 EnableCors操作过滤器。我认为您在此处的EnableCors声明是多余的。有关更多信息,请参见https://stackoverflow.com/a/29972098/5947043

有关更多信息,请参见https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers

答案 1 :(得分:0)

我对此一无所知,但是在Node中我也遇到了同样的问题。 我想如果你改变这个

<add name="Access-Control-Allow-Headers" value="Content-Type" />

<add name="Access-Control-Allow-Headers" value="*" />

<add name="Access-Control-Allow-Headers" value="Authorization" />

因为您正在调用授权标头。