한 번의 작업으로 Get과 Post에 모두 응답하고 싶습니다. 나는 다음을 시도했다
[HttpGet]
[HttpPost]
public ActionResult SignIn()
작동하지 않는 것 같습니다. 어떤 제안?
한 번의 작업으로 Get과 Post에 모두 응답하고 싶습니다. 나는 다음을 시도했다
[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();
}
필요에 따라 HttpContext.Request.HttpMethod 값을 조작하여 HttpMethod에 따라 다른 논리를 수행 할 수 있습니다.
SignIn(Guid? UserId)
있고 POST에는 뷰 모델이 SignIn(SomeVM vm)
있고 둘 다 공유 개인 메서드를 호출하는 SignInHandleGetPost(...)
GET 메서드가 있습니다. 이는 GET 메서드가 초기화해야하는 VM 또는 선택적 매개 변수 또는 원하는대로 수행 할 수 있습니다. ruseable / shared 코드를 리팩토링하기 위해.
AccountController.Login(String returnUrl, LoginViewModel model)
제대로 작동합니다. model
GET에서는 null이고 POST에서는 null이 아닙니다. 그러나 GET 요청에서 예외가 발생 [ValidateForgeryToken]
하므로 재정의해야 ValidateForgeryToken
합니다.
[HttpGet]
public ActionResult SignIn()
{
}
[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}