SignalR netcore .net5 webapi 设置 跨域
问题还原
Access to XMLHttpRequest at '(请求路径)' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
跨域(CORS)请求:同源策略/SOP(Same origin
policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
浏览器和服务器实现跨域(CORS)判定的原理
主要为浏览的限制
- 微软官方跨域教程
在 ASP.NET Core 中启用跨源请求 (CORS) | Microsoft Learn

解决方式
方式1 指定受信赖的域可以跨域
ConfigureServices(IServiceCollection services)配置
services.AddCors(options => { options.AddPolicy(name: MyAllowSpecificOrigins, builder => { //添加收信赖的地址 builder.WithOrigins("http://localhost/8080", "http://localhost/8081") .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); });
Configure(IApplicationBuilder app, IWebHostEnvironment env)配置
app.UseRouting(); app.UseCors("cors");//启用跨域 app.UseAuthorization();
或者在配置文件中配置读取允许的域名
ConfigureServices(IServiceCollection services)配置
services.AddCors(options => { options.AddPolicy("cors", builder => { builder .WithOrigins( configuration["App:CorsOrigins"] .Split(",", StringSplitOptions.RemoveEmptyEntries) .ToArray() ) .SetIsOriginAllowedToAllowWildcardSubdomains() .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); });
appsetting.json配置
"App": { "CorsOrigins": "http://localhost/8080" }
方式二、允许所有域 推荐
Startup.cs
ConfigureServices(IServiceCollection services)配置
services.AddCors(options => options.AddPolicy("cors",
builder =>
{
builder.AllowAnyMethod()
.AllowAnyHeader()
.SetIsOriginAllowed(_ => true)
.AllowCredentials();
}));
Configure(IApplicationBuilder app, IWebHostEnvironment env)配置
app.UseRouting(); app.UseCors("cors");//启用跨域 app.UseAuthorization();
End 可以开心的玩耍前端了

浙公网安备 33010602011771号