在预检响应中,Access-Control-Allow-Headers不允许请求头字段x-ms-request-root-id

时间:2017-05-11 15:15:02

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

我在同一解决方案中有一个ASP.Net Core和一个Web Api项目。我在我的核心项目中调用Get,Post,Put,Delete,这是在我的Api项目中定义的。当然我需要启用CORS。

Bellow是我在Web Api web.config文件中添加的代码,

<httpProtocol>
  <customHeaders>
    <!-- Enable Cross Domain AJAX calls -->
     <clear />
          <add name="Access-Control-Allow-Origin" value="*" />
          <add name="Access-Control-Allow-Headers" value="Content-Type"/>
  </customHeaders>
</httpProtocol>

来自Core项目的Ajax代码,

$.ajax({
        "url": "myApiUrl",
        "type": "Get",
        "data": {
            //Here I'm passing a value
        },
         success: function (d) {
        }

我将这两个项目都设置为启动项目。这不是问题。它调用Api方法并返回数据。但有时候它没有返回任何东西,即使该方法返回数据,我收到了我在问题标题中提到的browser console中的错误。我在SO中检查了很多答案,包括this one,所有人都说我需要在access control中添加response header。任何人都告诉我需要准确添加的位置以及我需要添加的内容以便它能按预期工作。

我用Asp.net MVC项目检查了核心,同样的事情发生了。

注意:我在我的Web Api项目中添加了CORS,而不是在我的Web项目中。

2 个答案:

答案 0 :(得分:1)

我猜你没有在Web API中正确启用CORS。您可以通过以下流程执行此操作:

1)您可以将[EnableCors]属性放在Web API中的控制器上,也可以在WebAPI配置中全局放置。

示例 - [EnableCors("*", "*", "*")]。 把它放在控制器上(你想要允许CORS)。 注意:您可以修改此过滤器的属性以允许某些方法,URL等

2)在WebAPi.config中调用enableCors,即

public static void Register(HttpConfiguration config)
  {
    // Other configuration omitted
    config.EnableCors();
  }

编辑:如果需要全局启用CORS,请从控制器中删除EnableCors属性,并将WebApiConfig.cs文件中的EnableCors()行修改为:

config.EnableCors(new EnableCorsAttribute("*", "*", "*"));

答案 1 :(得分:0)

试试这个:

   public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(o => o.AddPolicy("CrossPolicy", builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyMethod()
               .AllowAnyHeader();
    }));

    // ...
} 

对于每个请求:

public void Configure(IApplicationBuilder app)
{
    app.UseCors("CrossPolicy");

    // ...
}

OR

[EnableCors("CrossPolicy")]

您可以在thisthis链接中找到更多信息。

希望对你有帮助。