【问题标题】:Loose binding of parameter names in WebApi routingWeb Api 路由中参数名称的松散绑定
【发布时间】:2013-01-28 23:30:56
【问题描述】:

目前我们使用以下路由规则来满足我们所有的控制器;优点是我们不必为每个控制器中的每个操作定义路由:

routes.MapHttpRoute("3", "{controller}/{action}/{arg1}/{arg2}/{arg3}");
routes.MapHttpRoute("2", "{controller}/{action}/{arg1}/{arg2}");
routes.MapHttpRoute("1", "{controller}/{action}/{arg1}");
routes.MapHttpRoute("0", "{controller}/{action}");

但是,由于这个原因,方法中的参数名称必须匹配;像这样:

// Example method signature
public ResponseDto GetResponse(int arg1, int arg2)

如果将参数名称更改为更友好的名称(例如:显示每个参数意图的名称,而不是模棱两可的“arg1”名称),如下所示:

// Better example method signature
public ResponseDto GetResponse(int userId, int itemId)

绑定会中断,除非:

  • 明确定义路由和参数名称
  • 使用查询字符串传入参数

有没有办法设置 WebApi 路由,所以它会根据参数的数量自动使用正确的操作;而不是参数名称?

【问题讨论】:

    标签: c# asp.net-web-api


    【解决方案1】:

    您似乎正在尝试做类似于this good blog post on custom parameter binding 中描述的事情。正如您所发现的,没有任何开箱即用的东西可以支持您尝试做的事情。

    在概念层面,HTTP 是围绕资源 的概念构建的。 URI 应该标识一个特定的资源。使用通用位置“参数”似乎模糊了资源的特殊性。使用 URI 的查询字符串似乎可以更好地服务于您的用例。这样一来,您的 HTTP API 就可以清楚地表达给定资源的预期参数的意图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-23
      • 2017-09-16
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多