Ros*_*sim 20 asp.net-mvc asp.net-mvc-4
这个问题在这里被问到:
但是如果我有两个具有相同名称但参数不同的动作呢?如何重定向到POST Terms操作而不是GET Terms操作.
public ActionResult Terms() {
//get method
}
[HttpPost]
public ActionResult Terms(string month, string year, int deposit = 0, int total = 0) {
//process POST request
}
Run Code Online (Sandbox Code Playgroud)
Ros*_*sim 50
没关系,实际上我可以直接调用方法而不是RedirectToAction像这样使用:
return Terms(month, year, deposit, total);
Run Code Online (Sandbox Code Playgroud)
代替:
return RedirectToAction("Terms", {month, year, deposit, total});
Run Code Online (Sandbox Code Playgroud)
您可以直接调用该方法,但我强烈建议您重新考虑您的架构/实现.
HTTP协议包含安全和不安全动词的概念.像GET这样的安全动词不会以任何方式修改服务器的状态,而像POST,PUT这样的不安全动词会修改状态.通过你GET调用POST方法你违反了这个原则,因为你的POST将要修改状态是不可想象的.
此外,最佳实践要求您应该限制所有操作的动词,因此如果第一个'Terms'方法是作为GET,那么还要为其添加HttpGet属性,以防止服务器接受其他Http操作以执行操作.