在RedirectToAction
控制器内调用时,它会使用HTTP GET自动重定向.如何明确告诉它使用HTTP POST?
我有一个接受GET和POST请求的动作,我希望能够RedirectToAction
使用POST并发送一些值.
像这样:
this.RedirectToAction( "actionname", new RouteValueDictionary(new { someValue = 2, anotherValue = "text" }) );
我希望使用HTTP POST而不是GET发送someValue
和anotherValue
值.有谁知道如何做到这一点?
对于您的特定示例,我会这样做,因为您显然不关心实际上浏览器是否仍然获得重定向(通过接受您已接受的答案):
[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,这就是你在答案中建议的链接.
如果有什么的话,我很想知道这有什么"错误".显然,如果你真的想要向浏览器发送一个重定向,这不会起作用,但是你应该问为什么你会试图转换它,不管怎样,因为它对我来说似乎很奇怪.
希望有所帮助.
HTTP不支持使用POST重定向到页面.当你重定向到某个地方时,HTTP"Location"标题会告诉浏览器去哪里,浏览器会对该页面发出GET请求.您可能只需编写页面代码即可接受GET请求以及POST请求.
如果要在重定向期间在两个操作之间传递数据而不在查询字符串中包含任何数据,请将模型放在TempData对象中.
行动
TempData["datacontainer"] = modelData;
视图
var modelData= TempData["datacontainer"] as ModelDataType;
TempData意味着一个非常短暂的实例,您只应在当前和后续请求中使用它!由于TempData以这种方式工作,您需要确定下一个请求将是什么,并且重定向到另一个视图是唯一可以保证这一点的时间.
因此,使用TempData可靠地工作的唯一方案是重定向时.
试试这个
return Content("");
我想扩大Jason Bunting的答案
像这样
ActionResult action = new SampelController().Index(2, "text"); return action;
Eli将会在这里对如何使它成为泛型变量有一些想法
可以获取所有类型的控制器