Я хотів би, щоб одна дія відповіла як на Gets, так і на Posts. Я спробував наступне
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Здається, це не спрацювало. Будь-які пропозиції ?
Я хотів би, щоб одна дія відповіла як на Gets, так і на Posts. Я спробував наступне
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Здається, це не спрацювало. Будь-які пропозиції ?
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
чи [AcceptVerbs(HttpVerbs.Get)][AcceptVerbs(HttpVerbs.Post)]
? Я нічого не знаю про ці атрибути, але якщо ви робите другий, можливо, саме тому ви отримуєте цю помилку.
Відповіді:
Це можливо за допомогою атрибута AcceptVerbs. Це трохи детальніше, але більш гнучко.
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
public ActionResult SignIn()
{
}
Більше про msdn .
Дії відповідають як GET, так і POST за замовчуванням, тому вам не потрібно нічого вказувати:
public ActionResult SignIn()
{
//how'd we get here?
string method = HttpContext.Request.HttpMethod;
return View();
}
Залежно від ваших потреб, ви все одно можете виконувати різну логіку залежно від HttpMethod, оперуючи значенням HttpContext.Request.HttpMethod.
SignIn(Guid? UserId)
а POST має модель перегляду, SignIn(SomeVM vm)
і обидва викликають спільний приватний метод SignInHandleGetPost(...)
... який, можливо, вимагає VM, який повинен ініціалізувати метод GET, або необов’язкові параметри, або все, що ви віддаєте перевагу робити для рефакторингу коду, що використовується / для спільного використання.
AccountController.Login(String returnUrl, LoginViewModel model)
і він працює нормально. model
є нульовим для GET та ненульовим для POST. Однак [ValidateForgeryToken]
потрібно перевизначити, оскільки ValidateForgeryToken
видає виняток із запитів GET.
[HttpGet]
public ActionResult SignIn()
{
}
[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}