Razor Pages重写路由遇RoutePatternException异常求助
解决方法
首先检查你的@page指令写法,确保它单独占据一行,不要和@model或其他指令混写在同一行。这是触发该异常最常见的原因,比如如果写成:
@page "/layouts/{layoutId:int}/save/{revisionId:int}" @model SaveModel
路由解析器会把后面的@model部分误判为路由模板的一部分,导致括号匹配异常。正确的写法应该是:
@page "/layouts/{layoutId:int}/save/{revisionId:int}" @model YourProjectNamespace.SaveModel
接着验证页面模型类的参数定义是否与路由约束完全匹配,确保参数类型是int,并且作为请求处理方法的参数存在:
public class SaveModel : PageModel { public void OnGet(int layoutId, int revisionId) { // 你的业务逻辑代码 } }
如果上述都没问题,尝试清理并重新生成项目:
- 手动删除项目目录下的
bin和obj文件夹 - 执行命令:
dotnet clean&&dotnet build
另外确认Program.cs中正确配置了Razor Pages路由,确保app.MapRazorPages();语句存在且位置正确(在UseAuthorization()之后,app.Run()之前)。
如果去掉开头斜杠后路由不符合预期,是因为不带斜杠的模板是相对路由,会附加在页面的默认路由路径之后。比如你的页面如果在Pages/Layouts/Save.cshtml,默认路由是/layouts/save,使用@page "layouts/{layoutId:int}/save/{revisionId:int}"会生成/layouts/save/layouts/1/save/2这种不符合预期的URL,因此必须使用带开头斜杠的绝对路由模板来定义你想要的/layouts/1/save/2格式。
内容的提问来源于stack exchange,提问作者Jonas Kjær
相关产品推荐
相关产品推荐

