能否将.NET 7 Blazor WASM(含客户端与服务端API)部署到IIS子应用?
把.NET 7 Blazor WebAssembly(含客户端+服务端)部署到IIS现有站点子应用的方法
完全可以部署到子应用,按以下步骤操作即可:
一、调整项目配置
客户端项目
- 打开
wwwroot/index.html,将<base href="/" />修改为对应子应用的路径:<base href="/Application/" /> - 在
Program.cs中,确保API请求的基地址指向子应用下的API路径,示例代码:
也可以直接指定完整路径:builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress + "api/") });new Uri("https://example.com/Application/api/")
服务端项目(托管模式下)
如果是用Blazor WebAssembly托管模板创建的项目,在服务端的Program.cs中配置路径前缀:
// 为API控制器添加子应用路径前缀 app.MapControllers().WithMetadata(new RoutePrefixMetadata("Application/api")); // 配置Fallback路由,指向子应用的index.html app.MapFallbackToFile("Application/{*path:nonfile}", "index.html");
或者全局设置应用的路径基址:
app.UsePathBase("/Application");
二、发布项目
- 右键解决方案选择发布,目标类型选文件夹,指定发布目录。
- 托管模式下直接发布服务端项目即可(会自动打包客户端内容);如果是客户端、服务端分开的项目,将客户端发布的
wwwroot内容覆盖到服务端发布目录的wwwroot文件夹中。
三、IIS配置
- 打开IIS管理器,找到目标现有站点,右键选择添加应用程序:
- 别名填写
Application(对应子应用的URL路径) - 物理路径选择刚才的项目发布目录
- 应用程序池选择.NET 7对应池(没有则新建:.NET CLR版本选
v7.0,模式用集成;若为纯客户端项目,选无托管代码)
- 别名填写
- 确保子应用的身份验证设置与主站点一致,比如开启匿名身份验证。
- 在子应用的
web.config中添加Blazor路由重写规则,避免页面刷新出现404:<rewrite> <rules> <rule name="Blazor Routes" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="index.html" /> </rule> </rules> </rewrite>
四、测试验证
- 访问
https://example.com/Application,检查客户端页面是否正常加载。 - 测试API接口(如
https://example.com/Application/api/weatherforecast),确认能正常返回数据。
常见问题排查
- 404错误:检查
base href是否正确、IIS物理路径是否指向发布目录、重写规则是否配置到位。 - API请求失败:核对HttpClient的BaseAddress是否指向子应用API路径、服务端路由前缀是否配置正确。
- 权限问题:给应用程序池的身份分配发布目录的读写权限。
内容的提问来源于stack exchange,提问作者Jim S
相关产品推荐
相关产品推荐

