【问题标题】:MVC 5 not setting parameter named "action" to passed valueMVC 5未将名为“action”的参数设置为传递的值
【发布时间】:2014-07-29 11:15:40
【问题描述】:

我有以下方法:

public void Service(int id, string action)

当我将其作为 Url 访问时:

http://localhost/home/service?id=24&action=updated

MVC 将我的参数“action”设置为“service”(方法的名称),而不管我传递给参数的内容。

有没有办法覆盖 MVC 设置的这个“动作”参数(通过路由或任何属性)?

【问题讨论】:

  • 最简单的方法是重命名参数,比如“actionName”。这是一个选项吗?
  • 为了不破坏与以前版本的兼容性,我需要保留“动作”...除了重命名参数还有其他方法吗?
  • 那么这曾经在 MVC 3 中工作过吗?
  • 不,在这种情况下,我充当接收者...我们有 API 可以使用查询字符串 id=X&action=X 向请求者返回回调...我假装我正在接收回调并试图找出覆盖 MVC 接管“动作”。
  • 我的解决方法是读取查询字符串 NameValueCollection 并从那里获取操作

标签: asp.net-mvc asp.net-mvc-4


【解决方案1】:
Request.QueryString["ACTION"]

如果您正在使用名为 action 的成员填充对象,则在调试器中可能会显示这不起作用,但确实有效。使用 Console.WriteLine 或其他方法检查。

【讨论】:

    【解决方案2】:

    您需要将参数重命名为其他名称。

    “action”是 ASP.NET MVC 中的一种特殊情况,因此您需要避免将其用于其他目的。

    (注意:这在 WebAPI 中可以正常工作)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      相关资源
      最近更新 更多