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 les requêtes GET et POST, et je veux pouvoir RedirectToAction
utiliser 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 ça?
asp.net-mvc
url-redirection
Chris Pietschmann
la source
la source
Réponses:
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 requête GET pour cette page. Vous devrez probablement simplement écrire le code de votre page pour accepter les requêtes GET ainsi que les requêtes POST.
la source
Pour votre exemple particulier, je ferais simplement ceci, car vous ne vous souciez évidemment pas que le navigateur reçoive la redirection de toute façon (en acceptant la réponse que vous avez déjà acceptée):
Cela fonctionne facilement et il n'y a pas vraiment de choses amusantes en cours - cela vous permet de maintenir le fait que le second n'accepte vraiment que les requêtes HTTP POST (sauf dans ce cas, qui est de toute façon sous votre contrôle) et vous n'avez pas à le faire. utilisez TempData non plus, ce que suggère le lien que vous avez publié 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 demander pourquoi vous essayez de convertir cela malgré tout, car cela me semble étrange.
J'espère que cela pourra aider.
la source
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
TempData est censé être une instance de très courte durée, et vous ne devez l'utiliser que pendant les requêtes en cours et les suivantes! Étant donné que TempData fonctionne de cette façon, vous devez savoir avec certitude quelle sera la prochaine demande, et 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 lorsque vous effectuez une redirection.
la source
essaye celui-là
la source
Je voudrais développer la réponse de Jason Bunting
comme ça
Et Eli sera ici pour une idée sur la façon de la rendre variable générique
Peut obtenir tous les types de contrôleur
la source
new ...()
car vous perdrez leRequestContext
- si vous êtes déjà dans le même contrôleur, vous n'aurez peut-être pas besoin de créer une nouvelle instance. Sinon, prenez le chemin suivant:SampelController sampleController = DependencyResolver.Current.GetService<SampelController>()
alors:sampleController.ControllerContext = new ControllerContext(Request.RequestContext, sampleController);
alors vous pouvezreturn sampleController.Index(2, "text");
Juste un indice :)