同一Razor Page配置多路由后TagHelper指向最后一条路由的问题咨询
Razor Page多路由映射后TagHelper生成地址异常解决方案
问题根因
AddPageRoute 方法的作用是给指定Razor Page追加备用入站路由,默认所有注册的路由都会参与出站URL生成。路由系统生成出站URL时会优先匹配最后注册的路由模板,因此无论用户从/one、/two还是/three路径访问页面,TagHelper默认生成的表单、链接地址都会指向最后配置的/three。
解决方案
你可以根据实际业务需求选择对应方案:
场景1:所有访问路径的表单统一提交到原始页面路径/one
仅需要将额外添加的备用路由设置为「仅处理入站请求,不参与出站URL生成」即可,修改路由配置代码如下:
// 原始页面/one的默认路由自动保留出站URL生成能力 options.Conventions.AddPageRoute("/one", "two", new Dictionary<string, object> { { "SupportsLinkGeneration", false } }); options.Conventions.AddPageRoute("/one", "three", new Dictionary<string, object> { { "SupportsLinkGeneration", false } });
配置完成后,/two、/three仅作为入站访问路径生效,TagHelper生成出站URL时会自动匹配原始的/one路由,不会再指向最后注册的路由。
场景2:表单提交路径与当前访问路径保持一致
如果需要实现用户从/two访问就提交到/two、从/three访问就提交到/three,不需要修改路由配置,直接在页面的表单TagHelper中显式指定提交地址为当前请求路径即可:
<form method="post" action="@Context.Request.Path"> <!-- 表单内容 --> <button type="submit" asp-page-handler="Update">提交</button> </form>
内容的提问来源于stack exchange,提问作者Enrico Eusebi
相关产品推荐
相关产品推荐

