Я бы хотел, чтобы одно действие отвечало как на получение, так и на сообщения. Я пробовал следующее
[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)
{
}