你能在控制器中使用generics方法吗?

是否可以在控制器中使用通用方法? 我在谈论这样的事情:

[HttpPost] public void DoSomething([FromBody] SomeGenericClass someGenericObject) { SomePrivateMethod(someGenericObject); } 

我实际上已经尝试了上面的内容(虽然所有内容都有不同的名称)并且在请求正文中使用someGenericObject的实例发布到Api//DoSomething ,但它不起作用(即它没有到达控制器)。

我猜测Web API路由无法解析generics方法,因为它们可能导致下面不同类型的不同方法。 但这就是我的想法。

那么,是否可以在控制器中使用通用方法?

  • 如果有,怎么样?
  • 如果没有,为什么?

“排序”就是这里的答案。 使用generics,你最终必须在某个地方定义基础类型,否则它只是理论上的。 Web API或MVC如何将请求中的数据(只是QueryString GET或FormData POST键值对)路由到generics类型并自动推断出预期类型 ? 这不可以。 您可以做的是在控制器上创建一个私有generics方法,但让控制器的Action Methods解析为传递给私有generics方法的具体类型。

你也可以看看这个SO答案作为一种替代的,基于惯例的方法。 假设您将通用控制器的具体类型指定为URL,QueryString或FormData的一部分,它应该可以很好地工作。