此问题已在此处提出:
RedirectToAction with parameter
但是,如果我有两个具有相同名称但参数不同的动作怎么办?如何重定向到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
}
答案 0 :(得分:47)
没关系,实际上我可以直接调用方法而不是像RedirectToAction
一样使用{/ p>
return Terms(month, year, deposit, total);
而不是:
return RedirectToAction("Terms", {month, year, deposit, total});
答案 1 :(得分:5)
您可以直接调用该方法,但我强烈建议您重新考虑您的体系结构/实现。
HTTP协议包含安全和不安全动词的概念。像GET这样的安全动词不会以任何方式修改服务器的状态,而像POST,PUT这样的不安全动词会修改状态。通过你GET调用POST方法你违反了这个原则,因为你的POST将要修改状态是不可想象的。
另外,最佳做法是规定您应该限制所有动作的动词,以便第一个条款可以使用。方法意味着作为GET,然后还向其添加HttpGet属性,以防止服务器接受其他Http操作以进行操作。