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

本文关键字:绑定 路由 参数 WebAPI | 更新日期: 2023-09-27 17:56:13

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

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

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

您似乎正在尝试执行类似于这篇关于自定义参数绑定的优秀博客文章中描述的操作。正如您所发现的,没有什么开箱即用的东西可以支持您正在尝试做的事情。

在概念层面上,HTTP 是围绕资源的概念构建的。URI 应标识特定资源。使用通用的位置"参数"似乎模糊了资源的特殊性。似乎使用 URI 的查询字符串可以更好地满足您的用例。这样,您的 HTTP API 就表达了给定资源所需的参数的明确意图。