Lorsque vous appelez RedirectToAction
dans un contrôleur, il redirige automatiquement à l'aide d'un HTTP GET. Comment lui dire explicitement d'utiliser un HTTP POST?
J'ai une action qui accepte à la fois les requêtes GET et POST), et je veux pouvoir utiliser RedirectToAction
avec POST et lui envoyer des valeurs .
Comme ça:
this.RedirectToAction(
"actionname",
new RouteValueDictionary(new { someValue = 2, anotherValue = "text" })
);
Je veux que les valeurs someValue
et anotherValue
soient envoyées à l'aide d'un HTTP POST au lieu d'un GET. Est-ce que quelqu'un sait comment faire cela?
HTTP ne prend pas en charge la redirection vers une page à l'aide de POST. Lorsque vous redirigez quelque part, l'en-tête HTTP "Location" indique au navigateur où aller et le navigateur fait une demande GET pour cette page. Vous devrez probablement écrire le code de votre page pour accepter les requêtes GET ainsi que les requêtes POST.
Pour votre exemple particulier, je voudrais simplement faire ceci, car vous ne vous souciez évidemment pas de laisser le navigateur recevoir la redirection de toute façon (en acceptant la réponse que vous avez déjà acceptée):
[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();
}
Cela fonctionne facilement et il n’ya aucune activité amusante en cours - cela vous permet de garder le fait que le second accepte uniquement les requêtes HTTP POST (sauf dans ce cas, qui est sous votre contrôle) de toute façon) et vous n’avez pas à utiliser TempData non plus, c’est ce que suggère le lien que vous avez posté dans votre réponse.
J'aimerais savoir ce qui ne va pas avec cela, s'il y a quelque chose. Évidemment, si vous voulez vraiment envoyer une redirection au navigateur, cela ne fonctionnera pas, mais vous devriez alors vous demander pourquoi vous essayez de convertir cela malgré tout, car cela me semble étrange.
J'espère que ça t'as aidé.
Si vous souhaitez transmettre des données entre deux actions lors d'une redirection sans inclure de données dans la chaîne de requête, placez le modèle dans l'objet TempData.
ACTION
TempData["datacontainer"] = modelData;
VUE
var modelData= TempData["datacontainer"] as ModelDataType;
TempData est censé être une instance de très courte durée, et vous ne devriez l'utiliser que pendant les requêtes en cours et suivantes uniquement! Puisque TempData fonctionne de cette façon, vous devez savoir avec certitude quelle sera la prochaine requête. La redirection vers une autre vue est le seul moment où vous pouvez le garantir.
Par conséquent, le seul scénario dans lequel l'utilisation de TempData fonctionnera de manière fiable est celui de la redirection.
essaye celui-là
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>");
J'aimerais développer la réponse de Jason Bunting
comme ça
ActionResult action = new SampelController().Index(2, "text");
return action;
Et Eli sera ici pour quelque chose idée sur la façon de le rendre variable générique
Peut recevoir tout type de contrôleur