C# 从ASP.NET核心中的方法属性访问泛型类参数T

C# 从ASP.NET核心中的方法属性访问泛型类参数T,c#,generics,asp.net-core,reflection,asp.net-core-mvc,C#,Generics,Asp.net Core,Reflection,Asp.net Core Mvc,我的问题 是否可以通过某种方式从附加到此泛型类中的方法的方法属性访问泛型类的类型参数T 示例 例如,假设我有一个通用控制器MyBaseController处理由子控制器MyChildController扩展的特定资源类型T 公共类MyChildController:MyBaseController { // ... } 现在,我使用Swagger来记录我的API,更具体地说,因此,我用注释我的操作来指定操作的返回类型。这一点很复杂,因为ProducesResponseType需要一个Type参

我的问题

是否可以通过某种方式从附加到此泛型类中的方法的方法属性访问泛型类的类型参数
T

示例

例如,假设我有一个通用控制器
MyBaseController
处理由子控制器
MyChildController
扩展的特定资源类型
T

公共类MyChildController:MyBaseController
{
// ...
}
现在,我使用Swagger来记录我的API,更具体地说,因此,我用注释我的操作来指定操作的返回类型。这一点很复杂,因为
ProducesResponseType
需要一个
Type
参数来表示操作返回的值的类

公共抽象类MyBaseController:Controller,其中T:IResource
{

[HttpGet,ProductsResponseType(T)]/无法访问属性中的泛型

考虑另一种方法

参考文献

ASP.NET Core 2.1为Web API控制器操作引入了
ActionResult
返回类型。它使您能够返回从
ActionResult
派生的类型或返回特定类型

公共抽象类MyBaseController:Controller,其中T:IResource{
[HttpGet]
公共异步任务doSomething(){
// ...
}
}
它就是为了这个目的而创建的

ActionResult
提供了以下好处:
IActionResult
类型:

  • [ProducesResponseType]
    属性的
    类型
    属性可以是 排除在外
  • 隐式强制转换运算符支持两者的转换
    T
    ActionResult
    转换为
    ActionResult
    T
    转换为
    ObjectResult
    ,这意味着
    返回新的ObjectResult(T);
    是 简化为
    返回T;

非常感谢您的回答!虽然听说目前无法从属性访问泛型参数令人失望,但您提供的解决方案确实解决了我在指示swagger的操作返回类型方面的具体问题。
public abstract class MyBaseController<T> : Controller where T : IResource {
    [HttpGet]
    public async Task<ActionResult<T>> doSomething() {
        // ...
    }
}