.NET 8 Blazor Web App部署至IIS子目录时的路由映射错误
解决Blazor Web App部署IIS子目录后账户管理路径重复问题
问题原因
你遇到的路径重复问题,本质是相对路径拼接错误+应用未正确识别部署的子目录路径。当你在/MyApp/Account/Manage页面点击硬编码相对路径的Password链接时,浏览器会基于当前页面路径拼接新路径,导致Account/Manage重复;同时如果应用未配置PathBase,Identity的路由生成也可能出现偏差。
解决方案
1. 在Program.cs中配置PathBase
部署到IIS子目录时,必须告诉应用程序它的基础路径,添加以下代码:
var app = builder.Build(); // 配置应用的基础路径,对应IIS的MyApp子目录 app.UsePathBase("/MyApp"); // 后续中间件保持原有顺序 app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); // 确保Identity的Razor Pages路由正确映射 app.MapRazorPages(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host");
2. 检查并修复Identity页面的链接
进入项目中Areas/Identity/Pages/Account/Manage/Index.cshtml(或对应的管理页面视图文件),确认Password链接是否使用了Razor Pages的路由助手,而不是硬编码的相对路径:
正确写法(使用asp-page标签助手):
<a asp-page="./ChangePassword" class="nav-link">Password</a>
错误写法(硬编码相对路径,会导致拼接错误):
<a href="Account/Manage/ChangePassword" class="nav-link">Password</a>
3. 验证base href配置
确保App.razor中的base href配置正确,你已经设置的<base href="/MyApp/" />是正确的,无需修改。
原理说明
UsePathBase会让ASP.NET Core应用识别到自己部署在/MyApp子目录下,所有路由生成都会自动带上这个前缀。- 使用
asp-page标签助手生成的链接,会基于当前页面的路由上下文正确生成绝对路径,避免相对路径拼接错误。
内容的提问来源于stack exchange,提问作者vbond007
相关产品推荐
相关产品推荐

