目前我们使用以下路由规则来满足所有控制器的需求;优点是我们不必为每个控制器中的每个动作定义路线:
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路由,以便根据参数的数量自动使用正确的操作;而不是参数名称?
答案 0 :(得分:2)
您似乎正在尝试执行类似于this good blog post on custom parameter binding中所述的操作。正如您所知,没有任何开箱即用的东西可以支持您的目标。
在概念层面,HTTP是围绕 resources 的概念构建的。 URI应标识特定资源。使用通用位置“参数”似乎模糊了资源的特异性。通过使用URI的查询字符串,似乎可以更好地服务于您的用例。这样,您的HTTP API就表达了对给定资源所期望的参数的明确意图。