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)判定的原理
 主要为浏览的限制

  1. 微软官方跨域教程

在 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 可以开心的玩耍前端了


 

posted @ 2022-10-01 19:37  JohnnyLei  阅读(111)  评论(0)    收藏  举报