Me gustaría tener una sola acción que responda tanto a Gets como a Posts. Intenté lo siguiente
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Eso no pareció funcionar. Alguna sugerencia ?
Me gustaría tener una sola acción que responda tanto a Gets como a Posts. Intenté lo siguiente
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Eso no pareció funcionar. Alguna sugerencia ?
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
o [AcceptVerbs(HttpVerbs.Get)][AcceptVerbs(HttpVerbs.Post)]
? No sé nada sobre esos atributos, pero si está haciendo el segundo, puede que sea por eso que está obteniendo ese error.
Respuestas:
Esto es posible utilizando el atributo AcceptVerbs. Es un poco más detallado pero más flexible.
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
public ActionResult SignIn()
{
}
Más sobre msdn .
Las acciones responden tanto a GET como a POST de forma predeterminada, por lo que no tiene que especificar nada:
public ActionResult SignIn()
{
//how'd we get here?
string method = HttpContext.Request.HttpMethod;
return View();
}
Dependiendo de su necesidad, aún puede realizar una lógica diferente según el HttpMethod operando en el valor HttpContext.Request.HttpMethod.
SignIn(Guid? UserId)
y POST tiene un modelo de vista SignIn(SomeVM vm)
y ambos llaman a un método privado compartido SignInHandleGetPost(...)
... que tal vez tome una VM que el método GET debe inicializar, o parámetros opcionales, o lo que prefiera hacer para refactorizar el código reutilizable / compartido.
AccountController.Login(String returnUrl, LoginViewModel model)
y funciona bien. model
es nulo en GET y no nulo en POST. Sin embargo [ValidateForgeryToken]
, debe anularse porque ValidateForgeryToken
genera una excepción en las solicitudes GET.
[HttpGet]
public ActionResult SignIn()
{
}
[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}