25

这个问题在这里被问过:

带参数的 RedirectToAction

但是,如果我有两个名称相同但参数不同的操作怎么办?如何重定向到 POSTTerms操作而不是 GETTerms操作。

public ActionResult Terms() {
    //get method
}

[HttpPost]
public ActionResult Terms(string month, string year, int deposit = 0, int total = 0) {
    //process POST request
}
4

2 回答 2

60

没关系的家伙,实际上我可以直接调用该方法而不是RedirectToAction像这样使用:

return Terms(month, year, deposit, total);

代替:

return RedirectToAction("Terms", {month, year, deposit, total});
于 2013-05-20T06:11:08.423 回答
8

您可以直接调用该方法是正确的,但我强烈建议您重新考虑您的架构/实现。

HTTP 协议包含安全和不安全动词的概念。像 GET 这样的安全动词不会以任何方式修改服务器的状态,而像 POST、PUT 这样的不安全动词会修改状态。通过 GET 调用 POST 方法,您违反了这一原则,因为您的 POST 将要修改状态并非不可想象。

最佳实践还规定您应该限制所有操作的动词,因此如果第一个“术语”方法是 GET,那么还要向其添加 HttpGet 属性以防止服务器接受其他 Http 操作以执行该操作.

于 2015-01-31T07:15:30.393 回答