我有一个 blazor Web 程序集,它从构建在 ASP.NET Core 上的外部 API 获取,但我无权访问该程序集。我可以执行 get 请求,但无法执行 post 请求。当我这样做时,我收到以下错误。
从源“http://localhost:56138”获取“http://external:9000/User/Create”的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:无“访问” -Control-Allow-Origin'标头存在于所请求的资源上。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。
api 的作者确认他启用了 cors 来允许启动中的任何标头,并建议我也这样做,但这并没有解决问题。我从调试器中确认我正在发送端点所需的正确数据格式,并且我也在与 Web 服务相同的 http 方案上运行。
这是program.cs中的客户端配置
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("http://external:9000/") });
builder.Services.AddCors(policy =>
{
policy.AddPolicy("_myAllowSpecificOrigins", builder => builder.WithOrigins("http://external:9000/")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
Run Code Online (Sandbox Code Playgroud)
这就是我发帖的方式
var dataJson = JsonConvert.SerializeObject(application);
var stringContent = new StringContent(dataJson, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync($"User/Create", stringContent);
Run Code Online (Sandbox Code Playgroud)
我读过这是 blazor 组装的常见问题,但我不完全确定我读到的内容。我目前正在尝试将项目移动到 blazor 服务器以查看它是否有效,但我更喜欢它在 Web 组装上。