代码之家  ›  专栏  ›  技术社区  ›  Nestor

如何在以ASP.NET为核心的控制器中使用泛型方法

  •  0
  • Nestor  · 技术社区  · 8 年前

    我有以下的 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 属性I可以设置调用时将使用的URI。

    Testing 方法可以被调用(因此 是可见的)。然而,似乎在控制器中不存在泛型方法。

    根据 docs

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   nvoigt    8 年前

    ASP.NET与您期望的参数不匹配。它无法找出项目中的哪些类可能适合或不适合发送的JSON。您需要给它一个特定的类,然后它可以与JSON输入相匹配,要么成功,要么失败。

    ASP.NET需要有一个特定的控制器。它可以是泛型控制器,但需要知道类型。你不能说“我不知道,类型。。。用进来的东西就行了。正如他们需要知道的,有一个通用的方法去外面是不可能的。