Gig*_*igi 10 c# generics asp.net-web-api
是否可以在控制器中使用通用方法?我在谈论这样的事情:
[HttpPost]
public void DoSomething<T>([FromBody] SomeGenericClass<T> someGenericObject)
{
SomePrivateMethod<T>(someGenericObject);
}
Run Code Online (Sandbox Code Playgroud)
我实际上已经尝试了上面的内容(尽管所有内容都有不同的名称)并且在请求正文中发布Api/<controllername>/DoSomething了实例someGenericObject<T>,但它没有工作(即它没有到达控制器).
我猜测Web API路由无法解析泛型方法,因为它们可能导致下面不同类型的不同方法.但这就是我的想法.
那么,是否可以在控制器中使用通用方法?
Han*_*ney 10
"排序"就是这里的答案.使用泛型,你必须最终在某个地方和某个时刻定义基础类型,否则它只是理论上的.Web API或MVC如何将请求中的数据(只是QueryString GET或FormData POST键值对)路由到泛型类型并自动推断出预期类型?这不可以.您可以做的是在控制器上创建一个私有泛型方法,但让控制器的Action Methods解析为传递给私有泛型方法的具体类型.
你也可以看看这个SO答案作为一种替代的,基于惯例的方法.假设您将通用控制器的具体类型指定为URL,QueryString或FormData的一部分,它应该可以很好地工作.