Quando você chama RedirectToAction
dentro de um controlador, ele redireciona automaticamente usando um HTTP GET. Como eu digo explicitamente para usar um HTTP POST?
Tenho uma ação que aceita solicitações GET e POST e desejo poder RedirectToAction
usar o POST e enviar alguns valores.
Como isso:
this.RedirectToAction(
"actionname",
new RouteValueDictionary(new { someValue = 2, anotherValue = "text" })
);
Eu quero o someValue
e anotherValue
valores a ser enviado com um HTTP POST em vez de um GET. Alguém sabe como fazer isso?
asp.net-mvc
url-redirection
Chris Pietschmann
fonte
fonte
Respostas:
O HTTP não suporta o redirecionamento para uma página usando o POST. Quando você redireciona para algum lugar, o cabeçalho HTTP "Location" indica ao navegador para onde ir e o navegador faz uma solicitação GET para essa página. Você provavelmente precisará apenas escrever o código da sua página para aceitar solicitações GET e POST.
fonte
Para o seu exemplo em particular, eu faria isso, já que você obviamente não se importa em ter o navegador para obter o redirecionamento de qualquer maneira (em virtude de aceitar a resposta que você já aceitou):
Isso funciona facilmente e não há nenhum negócio engraçado realmente acontecendo - isso permite que você mantenha o fato de que o segundo realmente só aceita solicitações HTTP POST (exceto neste caso, que está sob seu controle de qualquer maneira) e você não precisa use TempData, que é o que o link que você postou na sua resposta está sugerindo.
Eu adoraria saber o que está "errado" com isso, se houver alguma coisa. Obviamente, se você realmente deseja enviar para o navegador um redirecionamento, isso não vai funcionar, mas você deve perguntar por que estaria tentando convertê-lo independentemente, pois isso me parece estranho.
Espero que ajude.
fonte
Se você deseja passar dados entre duas ações durante um redirecionamento sem incluir nenhum dado na cadeia de consulta, coloque o modelo no objeto TempData.
AÇAO
TempData["datacontainer"] = modelData;
VISÃO
TempData é uma instância de vida muito curta, e você deve usá-lo apenas durante as solicitações atuais e as subsequentes! Como o TempData funciona dessa maneira, você precisa saber com certeza qual será a próxima solicitação e o redirecionamento para outra visualização é a única vez que você pode garantir isso.
Portanto, o único cenário em que o uso do TempData funcionará de maneira confiável é quando você está redirecionando.
fonte
tente este
fonte
Gostaria de expandir a resposta de Jason Bunting
como isso
E Eli estará aqui para ter uma ideia de como torná-la variável genérica
Pode obter todos os tipos de controlador
fonte
new ...()
porque perderá oRequestContext
- se você já estiver no mesmo controlador, poderá não ser necessário criar uma nova instância. Caso contrário, siga o seguinte caminho:SampelController sampleController = DependencyResolver.Current.GetService<SampelController>()
then:sampleController.ControllerContext = new ControllerContext(Request.RequestContext, sampleController);
then you canreturn sampleController.Index(2, "text");
Just a hint :)