Wenn Sie RedirectToAction
innerhalb eines Controllers anrufen , wird dieser automatisch über ein HTTP-GET umgeleitet. Wie kann ich explizit festlegen, dass ein HTTP-POST verwendet werden soll?
Ich habe eine Aktion, die sowohl GET- als auch POST-Anforderungen akzeptiert, und ich möchte RedirectToAction
POST verwenden und ihm einige Werte senden können.
So was:
this.RedirectToAction(
"actionname",
new RouteValueDictionary(new { someValue = 2, anotherValue = "text" })
);
Ich will die someValue
und anotherValue
Werte über eine HTTP - POST statt GET gesendet werden soll. Weiß jemand, wie man das macht?
asp.net-mvc
url-redirection
Chris Pietschmann
quelle
quelle
Antworten:
HTTP unterstützt keine Umleitung zu einer Seite mithilfe von POST. Wenn Sie irgendwo umleiten, teilt der HTTP-Header "Location" dem Browser mit, wohin er gehen soll, und der Browser stellt eine GET-Anforderung für diese Seite. Sie müssen wahrscheinlich nur den Code für Ihre Seite schreiben, um sowohl GET-Anforderungen als auch POST-Anforderungen zu akzeptieren.
quelle
Für Ihr spezielles Beispiel würde ich dies nur tun, da es Ihnen offensichtlich egal ist, ob der Browser die Weiterleitung erhält (indem Sie die Antwort akzeptieren, die Sie bereits akzeptiert haben):
Das funktioniert einfach und es gibt kein lustiges Geschäft - so können Sie die Tatsache beibehalten, dass das zweite wirklich nur HTTP-POST-Anforderungen akzeptiert (außer in diesem Fall, der ohnehin unter Ihrer Kontrolle steht) und Sie müssen nicht Verwenden Sie auch TempData. Dies ist der Link, den Sie in Ihrer Antwort angegeben haben.
Ich würde gerne wissen, was daran "falsch" ist, wenn es etwas gibt. Wenn Sie wirklich eine Weiterleitung an den Browser gesendet haben möchten, funktioniert dies natürlich nicht, aber dann sollten Sie sich fragen, warum Sie versuchen würden, dies trotzdem zu konvertieren, da es mir seltsam erscheint.
Hoffentlich hilft das.
quelle
Wenn Sie während einer Umleitung Daten zwischen zwei Aktionen übergeben möchten, ohne Daten in die Abfragezeichenfolge aufzunehmen, fügen Sie das Modell in das TempData-Objekt ein.
AKTION
TempData["datacontainer"] = modelData;
AUSSICHT
TempData soll eine sehr kurzlebige Instanz sein, und Sie sollten sie nur während der aktuellen und der nachfolgenden Anforderungen verwenden! Da TempData auf diese Weise funktioniert, müssen Sie sicher wissen, wie die nächste Anforderung aussehen wird. Nur wenn Sie zu einer anderen Ansicht umleiten, können Sie dies garantieren.
Daher ist das einzige Szenario, in dem die Verwendung von TempData zuverlässig funktioniert, die Umleitung.
quelle
Probier diese
quelle
Ich möchte die Antwort von Jason Bunting erweitern
so was
Und Eli wird hier sein, um eine Idee zu bekommen, wie man es generisch variabel macht
Kann alle Arten von Controllern bekommen
quelle