Saya ingin memiliki satu tindakan untuk menanggapi Gets dan Post. Saya mencoba yang berikut ini
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Sepertinya itu tidak berhasil. Ada saran?
Saya ingin memiliki satu tindakan untuk menanggapi Gets dan Post. Saya mencoba yang berikut ini
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Sepertinya itu tidak berhasil. Ada saran?
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
atau [AcceptVerbs(HttpVerbs.Get)][AcceptVerbs(HttpVerbs.Post)]
? Saya tidak tahu apa-apa tentang atribut itu, tetapi jika Anda melakukan yang kedua, mungkin itulah sebabnya Anda mendapatkan kesalahan itu.
Jawaban:
Ini dimungkinkan dengan menggunakan atribut AcceptVerbs. Ini sedikit lebih bertele-tele tetapi lebih fleksibel.
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
public ActionResult SignIn()
{
}
Lebih lanjut tentang msdn .
Tindakan menanggapi GET dan POST secara default, jadi Anda tidak perlu menentukan apa pun:
public ActionResult SignIn()
{
//how'd we get here?
string method = HttpContext.Request.HttpMethod;
return View();
}
Bergantung pada kebutuhan Anda, Anda masih bisa melakukan logika yang berbeda bergantung pada HttpMethod dengan beroperasi pada nilai HttpContext.Request.HttpMethod.
SignIn(Guid? UserId)
dan POST memiliki model tampilan SignIn(SomeVM vm)
dan keduanya memanggil metode pribadi bersama SignInHandleGetPost(...)
... yang mungkin menggunakan VM yang harus diinisialisasi oleh metode GET, atau parameter opsional, atau apa pun yang Anda sukai untuk refactoring kode ruseable / shared.
AccountController.Login(String returnUrl, LoginViewModel model)
dan bekerja dengan baik. model
bernilai null pada GET dan bukan null pada POST. Namun [ValidateForgeryToken]
perlu diganti karena ValidateForgeryToken
memunculkan pengecualian pada permintaan GET.
[HttpGet]
public ActionResult SignIn()
{
}
[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}