CORS政策阻止对API的POST请求

时间:2019-10-23 19:51:36

标签: vue.js .net-core asp.net-core-webapi

我正在尝试部署我在线创建的应用程序。 UI是使用vue.js创建的,它正在调用以dotnet核心编写的API。我正在运行dotnet core 2.2。

该Web项目和API位于不同的服务器上,并且可以在不同的域中访问,如果有区别,该Web项目将托管在Netlify上。我设法建立了CORS政策,以便本地一切正常。当我在网络服务器上访问应用程序时,每当我发布数据时都会收到CORS错误。我的GETDELETE请求可以正常工作。

这是我的CORS政策

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("Default", builder =>
        {
            builder.WithOrigins(/* the domain where my web project is hosted */);

            builder.AllowAnyMethod();
            builder.AllowAnyHeader();
            builder.AllowCredentials();
        });
    });
}

所以我认为一切都应该没问题。 AllowCredentials是必需的,因为我正在使用SignalR,否则将无法正常工作。

开发工具中的错误消息是

  

POST [我的api端点] 400(错误请求)

     

CORS策略已阻止从来源“ https://xxx.netlify.com”访问“ [我的api端点]”处的XMLHttpRequest:请求的资源上没有“ Access-Control-Allow-Origin”标头。

当我查看运行dotnet项目的控制台时,会看到以下错误消息

  

连接ID“ 0HLQNTR19GE1T”错误的请求数据:“带有“连接:升级”的请求在请求正文中不能包含内容。”   Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException:具有“连接:升级”的请求在请求正文中不能包含内容。      在Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException.Throw(RequestRejectionReason原因)      在Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1MessageBody.For(HttpVersion httpVersion,HttpRequestHeaders标头,Http1Connection上下文)      在Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection.CreateMessageBody()      在Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests [TContext](IHttpApplication`1应用程序)      在Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequestsAsync [TContext](IHttpApplication`1应用程序)

到目前为止,我尝试通过netlify.toml文件使用控制器动作上的Access-Control-Allow-Origin = "*"属性设置[EnableCors]头。我编辑了我的AJAX请求(axios)并设置了withCredentials: true,并且通常使用CORS策略。不幸的是,没有运气,我的想法不多了。

我对任何建议都很满意。

1 个答案:

答案 0 :(得分:1)

检查您的nginx.conf文件中是否有名为proxy_set_header的行并将其设置为Connection $http_connection