ASP.NET MVC:带有POST Action参数的RedirectToAction

Ros*_*sim 20 asp.net-mvc asp.net-mvc-4

这个问题在这里被问到:

带参数的RedirectToAction

但是如果我有两个具有相同名称但参数不同的动作呢?如何重定向到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)

  • 这是解决方案.但它似乎有点像黑客:浏览器中的地址仍旧是老方法.这样你就看不出来了,因为两种方法都是同一个名字.但是当你的带参数的方法被称为"TermsPost"时会出现问题.如何在浏览器地址栏中获取"TermsPost"(不是"条款")? (8认同)

Sar*_*zen 7

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

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

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