J'aimerais qu'une seule action réponde à la fois aux Objets et aux Messages. J'ai essayé ce qui suit
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Cela ne semblait pas fonctionner. Aucune suggestion ?
asp.net-mvc
asp.net-mvc-2
Cranialsurge
la source
la source
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
ou[AcceptVerbs(HttpVerbs.Get)][AcceptVerbs(HttpVerbs.Post)]
? Je ne sais rien de ces attributs, mais si vous faites le second, c'est peut-être pourquoi vous obtenez cette erreur.Réponses:
Cela est possible en utilisant l'attribut AcceptVerbs. C'est un peu plus bavard mais plus flexible.
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)] public ActionResult SignIn() { }
Plus d'informations sur msdn .
la source
Les actions répondent à la fois aux GET et aux POST par défaut, vous n'avez donc rien à spécifier:
public ActionResult SignIn() { //how'd we get here? string method = HttpContext.Request.HttpMethod; return View(); }
En fonction de vos besoins, vous pouvez toujours exécuter une logique différente en fonction de HttpMethod en opérant sur la valeur HttpContext.Request.HttpMethod.
la source
SignIn(Guid? UserId)
et POST a un modèle de vueSignIn(SomeVM vm)
et les deux appellent une méthode privée partagéeSignInHandleGetPost(...)
... qui prend peut-être VM que la méthode GET doit initialiser, ou des paramètres facultatifs, ou tout ce que vous préférez faire pour refactoriser le code utilisable / partagé.AccountController.Login(String returnUrl, LoginViewModel model)
et cela fonctionne bien.model
est nul sur GET et non nul sur POST. Cependant, il[ValidateForgeryToken]
doit être remplacé carValidateForgeryToken
lève une exception sur les requêtes GET.[HttpGet] public ActionResult SignIn() { } [HttpPost] public ActionResult SignIn(FormCollection form) { }
la source