Hem Gets hem de Gönderilere yanıt veren tek bir eylem olmasını istiyorum. Aşağıdakileri denedim
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Bu işe yaramadı. Herhangi bir öneri ?
Hem Gets hem de Gönderilere yanıt veren tek bir eylem olmasını istiyorum. Aşağıdakileri denedim
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Bu işe yaramadı. Herhangi bir öneri ?
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
yoksa [AcceptVerbs(HttpVerbs.Get)][AcceptVerbs(HttpVerbs.Post)]
? Bu özellikler hakkında hiçbir şey bilmiyorum ama eğer ikinciyi yapıyorsanız, bu hatayı almanın nedeni bu olabilir.
Yanıtlar:
Bu, AcceptVerbs özniteliği kullanılarak mümkündür. Biraz daha ayrıntılı ama daha esnek.
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
public ActionResult SignIn()
{
}
Msdn hakkında daha fazla bilgi .
Eylemler varsayılan olarak hem GET'lere hem de POST'lara yanıt verir, bu nedenle hiçbir şey belirtmeniz gerekmez:
public ActionResult SignIn()
{
//how'd we get here?
string method = HttpContext.Request.HttpMethod;
return View();
}
İhtiyacınıza bağlı olarak, HttpContext.Request.HttpMethod değeri üzerinde çalışarak HttpMethod'a bağlı olarak farklı mantık gerçekleştirebilirsiniz.
SignIn(Guid? UserId)
ve POST'un görünüm modeline sahip olan SignIn(SomeVM vm)
ve her ikisi de paylaşılan bir özel yöntemi çağıran bir SignInHandleGetPost(...)
GET yöntemim var ... yeniden kullanılabilir / paylaşılan kodu yeniden düzenlemek için.
AccountController.Login(String returnUrl, LoginViewModel model)
ve iyi çalışıyor. model
GET'te boş ve POST'ta boş değil. Ancak , GET isteklerine bir istisna attığından [ValidateForgeryToken]
geçersiz kılınması gerekir ValidateForgeryToken
.
[HttpGet]
public ActionResult SignIn()
{
}
[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}