NET中解决WebAPI解决跨域问题
解决跨域问题环境:NET 6项目:WebAPI+Vue// 设置允许所有来源跨域app.UseCors(options =>{options.AllowAnyHeader();options.AllowAnyMethod();options.AllowAnyOrigin();options.AllowCredentials();});// 设置只允许特定来源可以跨域app.UseCors(o
·
解决跨域问题
- 环境:NET 6
- 项目:WebAPI+Vue
问题还原
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)判定的原理
解决方式
添加受信赖的域
var MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
app.UseCors(MyAllowSpecificOrigins);//启用跨域问题
//Program.cs
builder.Services.AddCors(options =>
{
options.AddPolicy(name: MyAllowSpecificOrigins,
builder =>
{
//添加收信赖的地址
builder.WithOrigins("http://localhost/8080", "http://localhost/8081")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
或者在配置文件中配置
//Program.cs
builder.Services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins, builder =>
{
builder
.WithOrigins(
configuration["App:CorsOrigins"]
.Split(",", StringSplitOptions.RemoveEmptyEntries)
.ToArray()
)
.SetIsOriginAllowedToAllowWildcardSubdomains()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
//appsetting.json
"App": {
"CorsOrigins": "http://localhost/8080"
}
问题解决办法:The CORS protocol does not allow specifying a wildcard (any) origin and credentials at the same time. Configure the CORS policy by listing individual origins if credentials needs to be supported
CORS协议不允许同时指定通配符(任何)来源和凭据。如果需要支持凭据,请通过列出各个来源来配置CORS策略
解决请参考:https://www.cnblogs.com/linyijia/p/12981830.html
允许所有域
builder.Services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins, builder =>
{
builder.AllowAnyMethod()
.SetIsOriginAllowed(_ => true)
.AllowAnyHeader()
.AllowCredentials();
});
});
// 设置允许所有来源跨域
app.UseCors(options =>
{
options.AllowAnyHeader();
options.AllowAnyMethod();
options.AllowAnyOrigin();
options.AllowCredentials();
});
CORS协议不允许同时指定通配符(任何)来源和凭据。如果需要支持凭据,请通过列出各个来源来配置CORS策略
// 设置只允许特定来源可以跨域
app.UseCors(options =>
{
options.WithOrigins("http://localhost:3000", "http://127.0.0.1"); // 允许特定ip跨域
options.AllowAnyHeader();
options.AllowAnyMethod();
options.AllowCredentials();
});
更多推荐
已为社区贡献1条内容
所有评论(0)