Я бы хотел, чтобы одно действие отвечало как на получение, так и на сообщения. Я пробовал следующее
[HttpGet]
[HttpPost]
public ActionResult SignIn()
Похоже, это не сработало. Какие-либо предложения ?
asp.net-mvc
asp.net-mvc-2
Краниальный хирург
источник
источник
[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) { }
источник