You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:54:03