Я бы хотел, чтобы одно действие отвечало как на получение, так и на сообщения. Я пробовал следующее
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Похоже, это не сработало. Какие-либо предложения ?
Я бы хотел, чтобы одно действие отвечало как на получение, так и на сообщения. Я пробовал следующее
[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(...)
... который, возможно, принимает виртуальную машину, которую должен инициализировать метод GET, или дополнительные параметры, или все, что вы предпочитаете делать для рефакторинга умышленного / общего кода.
AccountController.Login(String returnUrl, LoginViewModel model)
и он отлично работает. model
имеет значение NULL при GET и ненулевое значение при POST. Однако [ValidateForgeryToken]
необходимо переопределить, потому что ValidateForgeryToken
выдает исключение при запросах GET.
[HttpGet]
public ActionResult SignIn()
{
}
[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}