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?
asp.net-mvc
asp.net-mvc-2
Cranialsurge
sumber
sumber
[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 .
sumber
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.
sumber
SignIn(Guid? UserId)
dan POST memiliki model tampilanSignIn(SomeVM vm)
dan keduanya memanggil metode pribadi bersamaSignInHandleGetPost(...)
... 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 karenaValidateForgeryToken
memunculkan pengecualian pada permintaan GET.[HttpGet] public ActionResult SignIn() { } [HttpPost] public ActionResult SignIn(FormCollection form) { }
sumber