Cuando usted llama RedirectToAction
dentro de un controlador, se redirige automáticamente utilizando un HTTP GET. ¿Cómo le digo explícitamente que use un HTTP POST?
Tengo una acción que acepta solicitudes GET y POST, y quiero poder RedirectToAction
usar POST y enviarle algunos valores.
Me gusta esto:
this.RedirectToAction(
"actionname",
new RouteValueDictionary(new { someValue = 2, anotherValue = "text" })
);
Quiero que el someValue
y anotherValue
los valores a ser enviado a través de un HTTP POST en lugar de GET. ¿Alguien sabe como hacer esto?
asp.net-mvc
url-redirection
Chris Pietschmann
fuente
fuente
Respuestas:
HTTP no admite la redirección a una página mediante POST. Cuando redirige a alguna parte, el encabezado "Ubicación" de HTTP le indica al navegador a dónde ir, y el navegador realiza una solicitud GET para esa página. Probablemente tendrá que escribir el código de su página para aceptar solicitudes GET y POST.
fuente
Para su ejemplo particular, simplemente haría esto, ya que obviamente no le importa que el navegador obtenga la redirección de todos modos (en virtud de aceptar la respuesta que ya ha aceptado):
Eso funciona fácilmente y no hay realmente ningún negocio divertido, esto le permite mantener el hecho de que el segundo realmente solo acepta solicitudes HTTP POST (excepto en este caso, que está bajo su control de todos modos) y no tiene que hacerlo use TempData tampoco, que es lo que sugiere el enlace que publicó en su respuesta.
Me encantaría saber qué está "mal" con esto, si hay algo. Obviamente, si realmente desea haber enviado al navegador una redirección, esto no va a funcionar, pero luego debe preguntarse por qué intentaría convertir eso de todos modos, ya que me parece extraño.
Espero que ayude.
fuente
Si desea pasar datos entre dos acciones durante una redirección sin incluir ningún dato en la cadena de consulta, coloque el modelo en el objeto TempData.
ACCIÓN
TempData["datacontainer"] = modelData;
VER
TempData está destinado a ser una instancia de muy corta duración, y solo debe usarlo durante las solicitudes actuales y posteriores. Dado que TempData funciona de esta manera, debe saber con certeza cuál será la próxima solicitud, y la redirección a otra vista es la única vez que puede garantizarlo.
Por lo tanto, el único escenario en el que usar TempData funcionará de manera confiable es cuando está redirigiendo.
fuente
prueba este
fuente
Me gustaría ampliar la respuesta de Jason Bunting
Me gusta esto
Y Eli estará aquí para tener una idea sobre cómo hacer que sea variable genérica
Puede obtener todo tipo de controlador
fuente
new ...()
porque perderá elRequestContext
- si ya está en el mismo controlador, es posible que no necesite crear una nueva instancia. De lo contrario, tome la siguiente manera:SampelController sampleController = DependencyResolver.Current.GetService<SampelController>()
luego:sampleController.ControllerContext = new ControllerContext(Request.RequestContext, sampleController);
entonces puedereturn sampleController.Index(2, "text");
Solo una pista :)