Ich möchte, dass eine einzige Aktion sowohl auf Gets als auch auf Posts reagiert. Ich habe folgendes versucht
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Das schien nicht zu funktionieren. Irgendwelche Vorschläge ?
asp.net-mvc
asp.net-mvc-2
Cranialsurge
quelle
quelle
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
oder[AcceptVerbs(HttpVerbs.Get)][AcceptVerbs(HttpVerbs.Post)]
? Ich weiß nichts über diese Attribute, aber wenn Sie die Sekunde ausführen, erhalten Sie möglicherweise diesen Fehler.Antworten:
Dies ist mit dem Attribut AcceptVerbs möglich. Es ist etwas ausführlicher, aber flexibler.
Mehr zu msdn .
quelle
Aktionen reagieren standardmäßig sowohl auf GETs als auch auf POSTs, sodass Sie nichts angeben müssen:
Abhängig von Ihren Anforderungen können Sie je nach HttpMethod immer noch unterschiedliche Logik ausführen, indem Sie den Wert HttpContext.Request.HttpMethod verwenden.
quelle
SignIn(Guid? UserId)
und POST hat ein AnsichtsmodellSignIn(SomeVM vm)
und beide rufen eine gemeinsam genutzte private Methode aufSignInHandleGetPost(...)
... die möglicherweise eine VM benötigt, die von der GET-Methode initialisiert werden muss, oder optionale Parameter oder was auch immer Sie bevorzugen zum Refactoring des wiederverwendbaren / gemeinsam genutzten Codes.AccountController.Login(String returnUrl, LoginViewModel model)
und es funktioniert gut.model
ist bei GET null und bei POST nicht null. Allerdings[ValidateForgeryToken]
muss überschriebenen sein , weilValidateForgeryToken
eine Ausnahme auf GET - Anfragen führt.quelle