你能在控制器中使用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的一部分,它应该可以很好地工作。