.NET Core API与Blazor CORS报错及同端口运行相关问题咨询
关于.NET Core API与Blazor应用跨域问题的解答
1、两个应用是否可以运行在同一个端口?
同一台设备上,相同协议(此处为HTTPS)、同一个端口无法同时运行两个独立的Web服务进程。但如果采用集成部署模式,将Blazor应用作为.NET Core API的静态资源挂载运行,二者可以共用同一个端口。
2、如果可以,要如何指定使用的端口?
分两种场景配置:
集成部署(共用端口)
- 发布Blazor应用,拿到生成的全量静态资源文件
- 将所有静态资源拷贝到.NET Core API项目的
wwwroot目录下 - 在API项目的
Program.cs中添加静态文件服务中间件(默认WebAPI模板可能未内置,需手动添加app.UseStaticFiles();,注意放在路由中间件之后、授权中间件之前) - 修改API项目的端口:打开项目
Properties文件夹下的launchSettings.json,修改applicationUrl节点的值为你需要的地址,示例:"applicationUrl": "https://localhost:5001;http://localhost:5000",也可以在启动时通过命令行指定:dotnet run --urls https://localhost:5001
独立部署(各自指定端口)
两个独立项目分别修改各自Properties/launchSettings.json中的applicationUrl即可,注意两个项目的端口不能重复。
3、将二者设置为同端口运行是否可以解决当前的CORS报错问题?
可以。CORS策略的触发前提是跨源请求,同源判断标准为「协议+域名+端口」三者完全一致,共用端口后两个服务符合同源要求,浏览器不会再触发CORS校验,自然不会出现Access-Control-Allow-Origin相关报错。
4、如果同端口运行无法解决,还有什么其他可行的解决办法?
最常用的方案是在.NET Core API项目中配置CORS策略,步骤如下:
- 注册CORS服务,在
Program.cs的var app = builder.Build();之前添加如下代码:
builder.Services.AddCors(options => { options.AddPolicy("AllowBlazorClient", policy => { // 填写Blazor应用的访问地址,多个地址用逗号分隔 policy.WithOrigins("https://localhost:44346") .AllowAnyHeader() .AllowAnyMethod() // 如果请求需要携带凭据(如Cookie、认证头),需要添加这一行 .AllowCredentials(); }); });
- 启用CORS中间件,在
app.UseAuthorization();之前添加:
app.UseCors("AllowBlazorClient");
注意事项:
- 生产环境不要使用
AllowAnyOrigin()开放所有来源,会存在安全风险 - 中间件顺序不能错,必须放在路由之后、授权之前,否则配置不生效
- 如果使用IIS Express启动,需要确保
launchSettings.json中IIS Express对应的端口和你配置的允许来源一致
内容的提问来源于stack exchange,提问作者Darkmatter5
相关产品推荐
相关产品推荐

