ASP.NET Core项目单次导航后路由异常跳转问题咨询
问题原因分析
- 路由相对解析异常:你当前使用无参数的
RedirectToPage()方法,默认会基于当前请求的上下文路径做相对路径解析,你的页面位于Identity区域下的/Account/Manage/Community/嵌套目录下,第二次请求时上下文路径解析错误,重复拼接了Community路径段,导致最终解析出来的页面路径不存在。 - 页面路由未显式声明:你的
Opinion.cshtml中@page指令没有指定固定路由模板,Razor Pages路由系统未匹配到对应页面时,会将待跳转的页面路径编码后作为page查询参数拼接在URL后,路径中的/就会被转义为%2F。 - 表单提交地址未显式指定:表单没有加
asp-page、asp-area属性,第二次提交时表单action地址解析错误,提交到了错误的路由上下文,进一步加剧了路径解析异常。
解决方案
按顺序修改以下几个位置即可:
- 替换
RedirectToPage()为显式指定绝对路径和区域的写法,修改Opinion.cshtml.cs中OnPost方法的返回逻辑:
// 原来的 return RedirectToPage(); 替换为下面的代码 return RedirectToPage("/Account/Manage/Community/Opinion", new { area = "Identity" });
- 给
Opinion.cshtml的@page指令显式指定固定路由:
// 原来的 @page 替换为下面的代码 @page "/Identity/Account/Manage/Community/Opinion"
- 给表单标签加上显式的提交地址属性,避免上下文解析错误:
<!-- 原来的<form id="opinion-form" method="post"> 替换为下面的代码 --> <form id="opinion-form" method="post" asp-page="/Account/Manage/Community/Opinion" asp-area="Identity">
修改完成后所有路由都会按显式声明的地址解析,不会再出现路径重复拼接、转义为查询参数的问题。
内容的提问来源于stack exchange,提问作者bara'a ageel
相关产品推荐
相关产品推荐

