在服务器上启用的CORS仍然收到标头错误

时间:2019-01-08 17:29:29

标签: reactjs google-chrome .net-core asp.net-core-webapi

这似乎是一个非常受欢迎的问题,但是我无法找到有效的解决方案

简而言之,仅在Chrome浏览器中,发出放置,补丁,删除或选项请求时会收到以下错误消息

  

起源'http://localhost:3000'已被CORS策略阻止:飞行前响应中Access-Control-Allow-Methods不允许方法补丁。

该呼叫在IE和Firefox中运行正常。通过邮递员和招摇也同样成功

我的API中有

     public IServiceProvider ConfigureServices(IServiceCollection services)
    {   
         services.AddCors();
         return configureMvcServices.ExecuteConfig();
    }


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
            app.UseCors(options => options.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
            var configureApp = new ConfigureApp(app, env);
            configureApp.DoConfig();
}

到目前为止,我也尝试过

  • 手动设置标题
  • 在服务功能中创建策略,并在使用所述策略名称的控制器上使用allowcors属性
  • 为每个答案创建一个自定义中间件,我似乎找不到哪一个设置标题和选项

我还试图手动设置标题以接受所有内容,但无济于事。我似乎找不到一个答案来创建中间件,但这并没有改变结果。我也有

我不知道该如何解决这个问题

这是进行呼叫的客户端代码

 return fetch(url + path, {
        method,
        headers:{
            'Accept': 'application/json',
            'crossDomain':'true',
            'Content-Type': 'application/json',
            'Pragma': 'no-cache',
            'Access-Control-Allow-Methods': '*'
        },
        body: JSON.stringify(data)
    })

我不知道可以在客户端设置哪些标头,尝试将其更改为纯文本/文本,但是如果有任何标头可以解决该问题,那么我将用尽我的google fu。

另外获取和发布都很好

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

好的,我无法解释为什么团队中的另一个开发人员设法解决了这个问题。

简而言之,Chrome似乎不喜欢AllowAnyMethod()

您必须阐明每种方法

  app.UseCors(options =>
               options
               .AllowAnyOrigin()
               .AllowAnyHeader()
               .WithMethods("POST", "GET", "PATCH", "PUT", "DELETE")
           );