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é ValidateForgeryTokengenera un'eccezione sulle richieste GET.
[HttpGet]
public ActionResult SignIn()
{
}
[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}