Blazor WASM启用CORS时AddCors方法不存在报错如何解决
问题原因
- 首先搞清楚一个基本逻辑:CORS是服务端控制的安全策略,从来不需要在前端客户端项目里配置。
AddCors是ASP.NET Core服务端提供的配置API,只在服务端项目中可用。 - 默认
dotnet new blazorwasm生成的是纯客户端WebAssembly项目,引用的是Blazor WebAssembly专属SDK,运行在浏览器沙箱里,默认不引入ASP.NET Core服务端的相关程序集,自然找不到AddCors扩展方法。 - 你尝试安装的
Microsoft.AspNetCore.App.Ref是ASP.NET Core服务端的专属引用包,不支持浏览器WebAssembly的目标平台,所以会报兼容性错误,就算强行绕过安装校验,这些服务端API依赖的HTTP管道在浏览器环境里根本不存在,也完全跑不起来。 - Blazor Server模板本身就是服务端运行的ASP.NET Core项目,所以可以直接调用
AddCors,和WASM模型的运行环境有本质区别。
正确配置方式
根据你的项目托管模式选对应方案即可:
- 独立部署的纯Blazor WASM项目:CORS配置要写在你实际请求的后端接口项目里,和WASM前端代码无关。比如你的WASM站点部署在
https://wasm.example.com,要请求https://api.example.com的接口,就去https://api.example.com对应的后端服务里配置CORS,把WASM的源加入允许列表。ASP.NET Core后端的配置示例:
// 后端API项目的Program.cs const string MyCorsPolicy = "AllowWasmClient"; builder.Services.AddCors(opt => { opt.AddPolicy(MyCorsPolicy, p => { p.WithOrigins("https://wasm.example.com") // 替换成你的WASM实际部署地址 .AllowAnyHeader() .AllowAnyMethod(); }); }); // 中间件顺序注意,UseCors要放在UseAuthorization、MapControllers之前 app.UseCors(MyCorsPolicy);
- 带Hosted后缀的ASP.NET Core托管Blazor WASM项目(创建时加了
--hosted参数):这种项目结构会自动生成.Server后缀的服务端项目,直接把上面的CORS配置写在这个.Server项目的Program.cs里即可,不要在.Client的客户端WASM项目里加任何CORS相关服务注册代码。 - 如果你要调用的是第三方公开接口、没法修改对方服务的CORS配置:不要在前端折腾,自己搭一个反向代理转发请求,在代理层加上跨域允许头即可。
注意:不要尝试给WASM客户端项目强行安装ASP.NET Core相关NuGet包来调用服务端API,这类API都依赖服务端的请求处理管道,在浏览器沙箱中没有运行基础,就算编译过了也会在运行时抛出异常。
内容的提问来源于stack exchange,提问作者HamedH
相关产品推荐
相关产品推荐

