如何使用POST动词redirect到页面?

在控制器中调用RedirectToAction ,它将使用HTTP GET自动redirect。 我如何明确地告诉它使用HTTP POST?

我有一个行动,接受GET和POST请求,我想能够使用POST RedirectToAction并发送一些值。

喜欢这个:

 this.RedirectToAction( "actionname", new RouteValueDictionary(new { someValue = 2, anotherValue = "text" }) ); 

我希望使用HTTP POST而不是GET发送someValueanotherValue值。 有谁知道如何做到这一点?

HTTP不支持使用POSTredirect到页面。 当你在某个地方redirect时,HTTP“位置”标题告诉浏览器去哪里,浏览器对该页面发出GET请求。 你可能只需要编写页面的代码来接受GET请求和POST请求。

举个例子,我只是这样做,因为你显然不关心实际上浏览器是否得到了redirect(通过接受你已经接受的答案):

 [AcceptVerbs(HttpVerbs.Get)] public ActionResult Index() { // obviously these values might come from somewhere non-trivial return Index(2, "text"); } [AcceptVerbs(HttpVerbs.Post)] public ActionResult Index(int someValue, string anotherValue) { // would probably do something non-trivial here with the param values return View(); } 

这很容易,没有什么有趣的事情发生 – 这可以让你保持第二个实际上只接受HTTP POST请求的事实(除非在这个例子中,无论如何你都可以控制这个请求),你不必使用TempData,这就是你在回答中发布的链接所build议的。

如果有什么问题,我很想知道这是什么“错误的”。 显然,如果你真的想要发送到浏览器的redirect,这是行不通的,但是你应该问为什么你会试图转换,因为这对我来说似乎很奇怪。

希望有所帮助。

如果要在redirect期间在两个操作之间传递数据而不在查询string中包含任何数据,请将该模型放入TempData对象中。

行动

TempData["datacontainer"] = modelData;

视图

 var modelData= TempData["datacontainer"] as ModelDataType; 

TempData是一个非常短暂的实例,你只能在当前和后续的请求中使用它! 由于TempData以这种方式工作,所以您需要确切知道下一个请求是什么,redirect到另一个视图是唯一可以保证这一点的时间。

因此,使用TempData可靠工作的唯一场景是在redirect时。

试试这个

 return Content("<form action='actionname' id='frmTest' method='post'><input type='hidden' name='someValue' value='" + someValue + "' /><input type='hidden' name='anotherValue' value='" + anotherValue + "' /></form><script>document.getElementById('frmTest').submit();</script>"); 

贾森的答案将在大多数情况下工作,我所看到的唯一的问题是,它是事故倾向。 即调用操作方法直接绕过应用于操作的所有filter 。 因此,如果对操作方法应用了任何validation或计数器types的筛选器,则可能会丢失该数据。 直接调用一个动作方法将会起作用,但应该谨慎应用。

我想扩大Jason Bunting的答案

喜欢这个

 ActionResult action = new SampelController().Index(2, "text"); return action; 

而Eli会在这里想出一些关于如何使它变成一个通用variables的想法

可以得到所有types的控制器