如何在带有ASP.NET Core的Controller中使用通用方法

时间:2018-08-16 09:00:36

标签: c# generics asp.net-core

我的ASP.NET Core项目中有以下Controller

  [Route("api/[controller]")]
  [ApiController]
  public class MainController : ControllerBase
  {
    [HttpGet("DataQ")
    public List<T> GetData<T>(int id) where T : class => new List<T>() { default(T) };

    [HttpGet("T1")
    public string Testing() => "Testing";
  }

如您所见,控制器不是通用的,但它包含通用的方法。

使用HttpGet属性,我可以设置通话时将使用的URI。

可以调用Testing方法(因此Controller是可见的)。但是,似乎控制器中不存在通用方法。

根据docs,只有通用控制器需要额外的措施才能被发现:

  

默认情况下,ASP.NET Core MVC会忽略通用控制器(例如,   SomeController<T>)。此示例使用控制器功能提供程序   在默认提供程序之后运行并添加通用控制器   指定类型列表的实例(在EntityTypes.Types中定义)

我可以以某种方式调用通用方法还是应该实现继承方法的继承控制器?

1 个答案:

答案 0 :(得分:1)

ASP.NET与您期望的参数不匹配。它无法确定您的项目中的哪个类可能适合也可能不适合发送的JSON。您需要为它提供一个特定的类,然后它可以与JSON输入匹配,并可以成功或失败。

ASP.NET需要具有特定的控制器。那可以是一个通用控制器,但是类型必须是已知的。您不能拥有通用名称,而是说“我不知道,类型...只使用输入的内容”。众所周知,无法使用通用方法。

您可以根据您的链接实现通用控制器,也可以继承在其C#代码中调用通用方法的控制器。