Mi piacerebbe che una singola azione rispondesse sia ai Gets che ai Post. Ho provato quanto segue
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Non sembra funzionare. Eventuali suggerimenti ?
Mi piacerebbe che una singola azione rispondesse sia ai Gets che ai Post. Ho provato quanto segue
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Non sembra funzionare. Eventuali suggerimenti ?
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
o [AcceptVerbs(HttpVerbs.Get)][AcceptVerbs(HttpVerbs.Post)]
? Non so nulla di quegli attributi, ma se stai facendo il secondo potrebbe essere il motivo per cui ricevi quell'errore.
Risposte:
Ciò è possibile utilizzando l'attributo AcceptVerbs. È un po 'più prolisso ma più flessibile.
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
public ActionResult SignIn()
{
}
Altro su msdn .
Le azioni rispondono a GET e POST per impostazione predefinita, quindi non devi specificare nulla:
public ActionResult SignIn()
{
//how'd we get here?
string method = HttpContext.Request.HttpMethod;
return View();
}
A seconda delle proprie esigenze, è comunque possibile eseguire una logica diversa a seconda di HttpMethod operando sul valore HttpContext.Request.HttpMethod.
SignIn(Guid? UserId)
e POST ha un modello di visualizzazione SignIn(SomeVM vm)
ed entrambi chiamano un metodo privato condiviso SignInHandleGetPost(...)
... che forse prende VM che il metodo GET deve inizializzare, o parametri opzionali, o qualunque cosa tu preferisca fare per il refactoring del codice utilizzabile / condiviso.
AccountController.Login(String returnUrl, LoginViewModel model)
e funziona bene. model
è nullo in GET e non nullo in POST. Tuttavia [ValidateForgeryToken]
deve essere sovrascritto perché ValidateForgeryToken
genera un'eccezione sulle richieste GET.
[HttpGet]
public ActionResult SignIn()
{
}
[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}