.NET Core 3.1迁移至.NET 6后Razor页面路由异常求助
.NET 6 Razor自定义路由跳转异常解决方案
问题根因
.NET 6优化了Razor页面与View Component的路由匹配逻辑,当自定义路由对应的页面包含完整HTML结构时,框架会误把非默认目录下的View Component当成匹配项;再加上_ViewImports全局注册的标签助手,直接触发了错误的组件渲染流程,哪怕目标页面根本没用到任何View Component。
解决步骤
1. 锁定View Component扫描目录
在Program.cs里明确指定框架只扫描默认的Components目录,杜绝误识别非预期组件:
builder.Services.AddControllersWithViews() .AddViewComponentsAsServices() .ConfigureViewComponentOptions(options => { options.ViewComponentLocationFormats.Clear(); // 仅保留默认的组件扫描路径 options.ViewComponentLocationFormats.Add("/Views/Components/{0}/{1}.cshtml"); options.ViewComponentLocationFormats.Add("/Views/Shared/Components/{0}/{1}.cshtml"); });
2. 局部注册标签助手
把_ViewImports里的全局标签助手注册删掉,只在真正需要用View Component的页面单独引用:
- 移除_ViewImports.cshtml中的
@addTagHelper *, 你的项目程序集名称 - 在需要使用View Component的页面顶部添加:
@addTagHelper *, 你的项目程序集名称
3. 提升自定义路由优先级
在Program.cs配置RazorPageOptions时,把自定义路由放在最前面,确保它先被匹配:
builder.Services.AddRazorPages(options => { // 自定义路由优先匹配 options.Conventions.AddPageRoute("/TestPage/TestOptions", "/nav/admin/testoptions"); });
4. 检查页面HTML结构
确保目标页面的HTML语法规范,避免未闭合标签或错误语法导致框架解析混乱:
- 保证页面有完整的
<html>、<head>、<body>标签 - 排查是否存在未闭合的自定义标签或Razor语法错误
内容的提问来源于stack exchange,提问作者Deepak Singh
相关产品推荐
相关产品推荐

