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() {
// ...
}
}