【发布时间】:2019-11-30 02:51:19
【问题描述】:
我正在尝试从 Blazor(client-side) 客户端向服务器发送请求,但我不断收到此错误:
从“[route]”(重定向自“[other route]”)处获取的访问权限 原点“[原点路由]”已被 CORS 策略阻止:否 请求中存在“Access-Control-Allow-Origin”标头 资源。如果不透明的响应满足您的需求,请设置请求的 模式为“no-cors”以获取禁用 CORS 的资源。
在服务器上,我已经在管道中添加了CORS 扩展,但无济于事:
服务器启动
public void ConfigureServices(IServiceCollection services) {
services.AddCors();
services.AddResponseCompression(options => {
options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[]
{
MediaTypeNames.Application.Octet,
WasmMediaTypeNames.Application.Wasm,
});
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
app.UseCors(x => x.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());
app.UseResponseCompression();
app.UseMvc();
app.UseBlazor<Client.Startup>();
}
Blazor 客户端请求
public async Task<Catalog> GetCatalogAsync() {
try {
HttpRequestMessage message = new HttpRequestMessage {
RequestUri = new Uri(BASE_PATH + Routes.GET_CATALOG), //BASE_PATH= 172.XX.XX.XX:8600
Method = HttpMethod.Get
};
var resp = await this.client.SendAsync(message); // client is HttpClient
var resultString = await resp.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<Catalog>(resultString);
return data;
} catch (Exception ex) {
throw;
}
}
控制器
[HttpGet]
[Route(Routes.GET_CATALOG)]
public async Task<Catalog> GetCatalogAsync() {
try {
var registry = await this.adminService.GetCatalogAsync();
return registry;
} catch (Exception ex) {
throw;
}
}
POCO
[Serializeable]
public struct Catalog{
}
我还能做些什么才能访问我的服务器?是因为 Blazor 吗?
如您所见,我已经添加了UseCors(...)。
附注
我已经发布了我的 Blazor Server 项目和客户端。它们在同一个目录中。我将这个文件夹放在计算机上,我正在尝试从我的计算机打开 blazor:172.168.18.22:8600/
更新
我也尝试将标题添加到我的HttpRequestMessage 无济于事:
HttpRequestMessage message = new HttpRequestMessage {
RequestUri = new Uri(BASE_PATH + Routes.GET_CATALOG),
Method = HttpMethod.Get,
};
message.Headers.Add("Access-Control-Allow-Origin","*");
message.Headers.Add("Access-Control-Allow-Credentials", "true");
message.Headers.Add("Access-Control-Allow-Headers", "Access-Control-Allow-Origin,Content-Type");
【问题讨论】:
-
您的客户端 Blazor 是否与服务器共享同一个域?
-
您从 Blazor 向哪个地址发出请求?您的 Blazor 应用程序位于哪个地址?
-
他们确实共享同一个域。
-
如果是这样,问题不在于 CORS。这是一个用户代码问题。