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 ?
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 ?
[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 .
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.
SignIn(Guid? UserId)
et POST a un modèle de vue SignIn(SomeVM vm)
et les deux appellent une méthode privée partagée SignInHandleGetPost(...)
... 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é car ValidateForgeryToken
lève une exception sur les requêtes GET.
[HttpGet]
public ActionResult SignIn()
{
}
[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}