.NET 6中RedirectToPage跳转URL重复编码问题排查
问题根源分析
出现URL重复编码的核心原因是**RedirectToPage的绝对路径调用与List页面的可选路由参数冲突**,或者框架在解析绝对路径时错误地将页面路径赋值给了page参数。当你调用RedirectToPage("/Admin/Links/List")时,Razor Pages框架可能误将完整路径当作page参数的值,导致生成/Admin/Links/List/%2FAdmin%2FLinks%2FList这样的错误URL。
解决方案
方案1:使用相对路径跳转
由于AddModel和ListModel处于同一个Admin/Links文件夹下,直接使用相对路径调用RedirectToPage即可避免路径解析错误:
// 替换原有的RedirectToPage调用 return RedirectToPage("List");
方案2:明确指定路由参数(强制不传递page参数)
如果必须使用绝对路径,可通过路由参数显式指定page为null,避免框架自动填充错误值:
return RedirectToPage("/Admin/Links/List", new { page = (int?)null });
方案3:直接使用URL重定向
绕过Razor Pages的页面解析逻辑,直接重定向到目标URL:
return Redirect("/Admin/Links/List");
额外排查点
- 检查List页面的
@page路由模板,确保是@page "{page?}"(可选单个段参数),而非@page "{*page}"(通配符参数,会捕获完整路径)。 - 确认
Pager类的定义中没有重写ToString()或其他可能干扰URL生成的方法,避免其属性值被错误注入到路由中。
内容的提问来源于stack exchange,提问作者mathdx
相关产品推荐
相关产品推荐

