我正在尝试部署我在线创建的应用程序。 UI是使用vue.js创建的,它正在调用以dotnet核心编写的API。我正在运行dotnet core 2.2。
该Web项目和API位于不同的服务器上,并且可以在不同的域中访问,如果有区别,该Web项目将托管在Netlify上。我设法建立了CORS政策,以便本地一切正常。当我在网络服务器上访问应用程序时,每当我发布数据时都会收到CORS错误。我的GET
和DELETE
请求可以正常工作。
这是我的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策略。不幸的是,没有运气,我的想法不多了。
我对任何建议都很满意。
答案 0 :(得分:1)
检查您的nginx.conf文件中是否有名为proxy_set_header
的行并将其设置为Connection $http_connection