我想要一个动作来同时响应Gets和Posts。我尝试了以下
[HttpGet]
[HttpPost]
public ActionResult SignIn()
那似乎没有用。有什么建议么 ?
我想要一个动作来同时响应Gets和Posts。我尝试了以下
[HttpGet]
[HttpPost]
public ActionResult SignIn()
那似乎没有用。有什么建议么 ?
[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)]
还是[AcceptVerbs(HttpVerbs.Get)][AcceptVerbs(HttpVerbs.Post)]
?我对这些属性一无所知,但是如果您要进行第二次操作,这可能就是您收到该错误的原因。
Answers:
使用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(...)
...这可能需要将VM GET方法必须初始化的VM或可选的params或您希望执行的任何操作用于重构可重用/共享的代码。
AccountController.Login(String returnUrl, LoginViewModel model)
运行良好。model
在GET上为null,在POST上为非null。但是[ValidateForgeryToken]
,由于ValidateForgeryToken
在GET请求上引发异常,因此需要重写。
[HttpGet]
public ActionResult SignIn()
{
}
[HttpPost]
public ActionResult SignIn(FormCollection form)
{
}