【发布时间】:2021-04-27 16:56:35
【问题描述】:
我有一个 blazor Web 程序集,它从基于 ASP.NET Core 构建的外部 API 获取,但我无权访问。我可以执行获取请求,但无法执行发布请求。当我这样做时,我收到以下错误。
CORS 策略已阻止从源“http://localhost:56138”获取“http://external:9000/User/Create”的访问权限:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-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());
});
这就是我发帖的方式
var dataJson = JsonConvert.SerializeObject(application);
var stringContent = new StringContent(dataJson, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync($"User/Create", stringContent);
我读过这是 blazor 程序集的一个常见问题,我不完全确定我读到了什么。我目前正在尝试将项目移动到 blazor 服务器以查看它是否可以工作,但我更喜欢在 Web 程序集上使用它。
【问题讨论】:
-
在客户端使用
.AddCors(...)用处不大。看起来其他作者可能允许任何标题但不允许任何方法。问题出在服务器上。 -
但是如果你无法修复这个问题,Blazor Server 应该不会有这个问题。
-
@HenkHolterman 这正是我的想法。我只是绝望地添加它。
-
您可以编写自己的 API 层作为中间人。让您仍然可以使用 Blazor Wasm。
-
@HenkHolterman 我让它在 Blazor 服务器上运行。我想我会坚持下去。而且我不必担心应用程序无法在某些浏览器上运行,例如 Web 程序集给出的问题
标签: c# asp.net-core cors blazor blazor-webassembly