Web Api路由中参数名称的松散绑定

时间:2013-01-28 10:56:40

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

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

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路由,以便根据参数的数量自动使用正确的操作;而不是参数名称?

1 个答案:

答案 0 :(得分:2)

您似乎正在尝试执行类似于this good blog post on custom parameter binding中所述的操作。正如您所知,没有任何开箱即用的东西可以支持您的目标。

在概念层面,HTTP是围绕 resources 的概念构建的。 URI应标识特定资源。使用通用位置“参数”似乎模糊了资源的特异性。通过使用URI的查询字符串,似乎可以更好地服务于您的用例。这样,您的HTTP API就表达了对给定资源所期望的参数的明确意图。