我正在尝试从Blazor
(客户端)客户端向服务器发送请求,但是一直收到以下错误:
由于CORS策略,来自源站点“[origin route]”的请求访问“[route]”(重定向自“[other route]”)被阻止。未在所请求资源的“Access-Control-Allow-Origin”标头中找到“[origin route]”。如果您需要一个不透明的响应,则将请求模式设置为'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(...)
。P.S 我已经发布了我的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");