Razor项目控制器调用RedirectToPage跳转页面报400错误如何修复?
问题修复方案
1. 优先排查方法误用问题
RedirectToPage 是 Razor Pages 架构专用的跳转方法,如果你当前项目是传统MVC架构,控制器中调用该方法本身就会出现路由匹配失败,触发400错误。
如果你的Stock.cshtml是MVC视图,直接改用View()方法返回视图即可:
// 直接指定视图完整路径,传递coupons作为视图模型 return View("~/Views/StockSales/Stock.cshtml", coupons);
如果当前Action所属的控制器就是StockSalesController,可以省略路径直接写:
return View(coupons);
MVC会自动到/Views/StockSales/目录下查找和Action同名的Stock.cshtml视图。
2. 如果确实需要跳转到Razor Page
如果Stock.cshtml是带@page指令的Razor Page,你需要修正RedirectToPage的传参方式:
直接把集合对象作为跳转参数会导致路由系统解析失败,触发400错误,建议通过TempData中转复杂类型数据:
// 先序列化数据存入TempData TempData["CouponData"] = JsonConvert.SerializeObject(coupons); // 跳转页面,不需要传第二个参数 return RedirectToPage("/StockSales/Stock");
在目标Razor Page的PageModel或者视图中取出数据:
var coupons = JsonConvert.DeserializeObject<List<Coupon>>(TempData["CouponData"]?.ToString() ?? "[]");
同时要确认两个配置:
- 你的Razor Page存放路径和跳转路径匹配,
RedirectToPage默认从项目的/Pages目录查找文件,如果你存在/Views目录下,需要在启动配置中修改Razor Pages根目录:builder.Services.AddRazorPages().AddRazorPagesOptions(opt => { opt.RootDirectory = "/Views"; }); - 目标
Stock.cshtml头部必须添加@page指令,否则无法通过Razor Pages路由访问。
3. 其他常见400原因排查
- 检查是否开启了全局防伪令牌验证:跳转请求如果没有携带防伪令牌会触发400,可以在当前Action上添加
[IgnoreAntiforgeryToken]属性测试验证是否是该原因导致。 - 检查目标页面是否配置了必填路由参数,如果参数缺失也会返回400错误。
内容的提问来源于stack exchange,提问作者ameen khan
相关产品推荐
相关产品推荐

