ASP.NET Core 7.0如何让RedirectToAction以Post传递路由参数?
解决方案:实现Post方式的"重定向"效果
HTTP标准里的重定向(3xx状态码)只能触发浏览器发送GET请求,因此RedirectToAction/RedirectToRoute这类原生重定向方法本质上无法直接实现Post传参。要达到类似"Post重定向"的效果,有两种常用方案:
1. 利用TempData传递参数后重定向
将需要传递的参数存入TempData,正常重定向到目标Action后,再从TempData中读取参数值。
示例代码:
// 源Action public IActionResult SourceAction() { // 存入待传递的参数 TempData["UserId"] = 123; TempData["UserName"] = "JohnDoe"; return RedirectToAction("TargetAction", "Home"); } // 目标Action public IActionResult TargetAction() { // 读取参数 if (TempData.TryGetValue("UserId", out var userIdObj) && int.TryParse(userIdObj.ToString(), out var userId)) { var userName = TempData["UserName"]?.ToString(); // 执行业务逻辑 } return View(); }
注意:TempData默认依赖Session服务,需确保项目已启用Session配置。
2. 返回自动提交的表单视图
生成包含隐藏字段的表单,页面加载后自动通过Post方式提交到目标Action,模拟重定向的体验。
步骤1:创建通用Post重定向视图(如PostRedirect.cshtml)
@model PostRedirectModel <form id="postRedirectForm" action="@Url.Action(Model.ActionName, Model.ControllerName)" method="post"> @foreach (var param in Model.RouteValues) { <input type="hidden" name="@param.Key" value="@param.Value" /> } </form> <script> // 页面加载后自动提交表单 document.addEventListener('DOMContentLoaded', () => { document.getElementById('postRedirectForm').submit(); }); </script>
步骤2:定义对应模型类
public class PostRedirectModel { public string ActionName { get; set; } public string ControllerName { get; set; } public Dictionary<string, object> RouteValues { get; set; } }
步骤3:在源Action中返回该视图
public IActionResult SourceAction() { var model = new PostRedirectModel { ActionName = "TargetAction", ControllerName = "Home", RouteValues = new Dictionary<string, object> { { "UserId", 123 }, { "UserName", "JohnDoe" } } }; return View("PostRedirect", model); } // 目标Post Action [HttpPost] public IActionResult TargetAction(int userId, string userName) { // 执行业务逻辑 return View(); }
关于RedirectToRoute的补充
RedirectToRoute其实可以指定Action和Controller,只需将它们作为路由参数传入:
return RedirectToRoute(new { action = "TargetAction", controller = "Home", userId = 123 });
但它同样触发GET请求,无法解决Post传参问题,仅为路由参数的另一种写法。
内容的提问来源于stack exchange,提问作者Abdelrahman Almowafy
相关产品推荐
相关产品推荐

