当您在控制器中调用RedirectToAction
时,它会使用HTTP GET自动重定向。我如何显式地告诉它使用HTTP POST?
我有一个既接受GET请求又接受POST请求的操作,并且我希望能够使用POST执行RedirectToAction
并向其发送一些值。
如下所示:
this.RedirectToAction(
"actionname",
new RouteValueDictionary(new { someValue = 2, anotherValue = "text" })
);
我希望使用HTTP POST而不是GET发送someValue
和anotherValue
值。有人知道怎么做吗?
发布于 2008-09-24 19:35:03
HTTP不支持使用POST重定向到页面。当您重定向到某个地方时,HTTP "Location“标头会告诉浏览器要去哪里,浏览器会对该页面发出一个GET请求。您可能只需要为您的页面编写代码来接受GET请求和POST请求。
发布于 2009-08-27 19:06:41
对于您的特定示例,我将这样做,因为您显然并不关心实际上让浏览器获取重定向(通过接受您已经接受的答案):
[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,这就是你在答案中发布的链接所暗示的。
如果有什么不对劲的话,我很想知道它的“错误”在哪里。显然,如果你真的想要向浏览器发送一个重定向,这是行不通的,但你应该问一问,为什么你要不顾一切地转换它,因为这对我来说似乎很奇怪。
希望这能有所帮助。
发布于 2013-10-15 18:19:33
如果要在重定向期间在两个操作之间传递数据而不在查询字符串中包含任何数据,请将模型放入TempData对象中。
动作
TempData["datacontainer"] = modelData;
视图
var modelData= TempData["datacontainer"] as ModelDataType;
TempData是一个生命周期非常短的实例,您应该只在当前和后续请求期间使用它!因为TempData是这样工作的,所以您需要确定下一个请求是什么,并且重定向到另一个视图是唯一可以保证这一点的时候。
因此,只有在重定向时,才能可靠地使用TempData。
https://stackoverflow.com/questions/129335
复制相似问题