Frage

Wenn Sie RedirectToAction innerhalb eines Controllers aufrufen, wird automatisch eine HTTP-GET-Umleitungen verwenden. Wie kann ich es ausdrücklich sagen, ein HTTP-POST zu benutzen?

Ich habe eine Aktion, die sowohl GET und POST-Anfragen akzeptiert, und ich möchte in der Lage sein, mit POST RedirectToAction und ihm einigen Werten senden.

Wie folgt aus:

this.RedirectToAction(
    "actionname",
    new RouteValueDictionary(new { someValue = 2, anotherValue = "text" })
);

Ich möchte die someValue und anotherValue Werte statt einer GET einen HTTP-POST gesendet werden. Wer weiß, wie dies zu tun?

War es hilfreich?

Lösung

HTTP unterstützt keine Umleitung auf eine Seite mit POST. Wenn Sie irgendwo umleiten, sagt der HTTP „Location“ Header des Browsers, wohin sie gehen, und der Browser macht für diese Seite eine GET-Anfrage. Sie werden wahrscheinlich müssen nur den Code für Ihre Seite schreiben, um GET-Anfragen sowie POST-Anfragen zu akzeptieren.

Andere Tipps

Für Ihre speziellen Beispiel, würde ich dies nur tun, da Sie offensichtlich kümmern sich nicht um tatsächlich der Browser sowieso die Umleitung erhalten hat (aufgrund der Annahme der Antwort, die Sie bereits akzeptiert haben):

[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();
}

Das funktioniert einfach und es gibt kein lustiges Geschäft geht wirklich - dies ermöglicht es Ihnen, die Tatsache zu behaupten, dass die zweiten wirklich nur HTTP-POST-Anfragen akzeptiert (außer in diesem Fall, die ohnehin unter Ihrer Kontrolle ist) und Sie don‘ t hat TempData entweder verwenden, das ist, was der Link in Ihrer Antwort geschrieben schlägt.

Ich würde gerne wissen, was „falsch“ mit dieser ist, wenn es etwas gibt. wenn Sie offensichtlich, wirklich wollen, haben an den Browser eine Umleitung gesendet, wird dies nicht zur Arbeit gehen, aber dann sollten Sie sich fragen, warum Sie, dass unabhängig konvertieren würde versuchen, da es mir merkwürdig erscheint.

Ich hoffe, das hilft.

Wenn Sie zwischen zwei Aktionen während einer Umleitung passieren Daten mögen, ohne Daten in dem Query-String enthalten, setzen Sie das Modell in dem TempData Objekt.

ACTION

TempData["datacontainer"] = modelData;

VIEW

var modelData= TempData["datacontainer"] as ModelDataType; 

TempData soll eine sehr kurzlebig Instanz sein, und Sie sollten es nur nur während der aktuellen und den nachfolgenden Anforderungen nutzen! Da TempData so funktioniert, müssen Sie sicher wissen, was die nächste Anforderung wird, und zu einer anderen Ansicht Umleitung ist die einzige Zeit, die Sie dies garantieren können.

Daher ist das einzige Szenario, in dem TempData mit arbeitet zuverlässig ist, wenn Sie werden umgeleitet wird.

versuchen Sie diesen

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>");

Ich mag die Antwort von Jason Bunting

erweitern

wie folgt

ActionResult action = new SampelController().Index(2, "text");
return action;

Und Eli wird hier für etwas Idee sein, wie es generische Variable machen

Kann alle Arten von Controller bekommen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top