作者:穿过a黑夜_440 | 来源:互联网 | 2022-12-10 00:30
我的问题
是否有可能以某种方式T
从附加到此泛型类中方法的方法属性中访问泛型类的类型参数?
一个例子
例如,说我有一个通用控制器MyBaseController
处理T
由子控制器扩展的某种资源类型MyChildController
。
public class MyChildController : MyBaseController
{
// ...
}
现在,我正在使用Swagger记录我的API,更具体地说是Swashbuckle,因此,我要使用ProducesResponseType注释我的操作以指定操作的返回类型。这很复杂,因为ProducesResponseType
需要一个Type
表示操作返回值的类的参数。
public abstract class MyBaseController : Controller where T : IResource
{
[HttpGet, ProducesResponseType(T)] // <-- DOESN'T WORK!
public async Task doSomething()
{
// ...
}
}
在上面的示例中,我需要T
以某种方式解决typeof(BlogPost)
有什么想法,还是不可能?
1> Nkosi..:
无法访问属性中的泛型。
考虑替代方法
ASP.NET Core Web API中的参考控制器操作返回类型
ASP.NET Core 2.1引入了ActionResult
Web API控制器操作的返回类型。它使您能够返回派生自ActionResult
特定类型的类型或返回特定类型。
public abstract class MyBaseController : Controller where T : IResource {
[HttpGet]
public async Task> doSomething() {
// ...
}
}
正是出于这个目的而创造的
ActionResult
与该IActionResult
类型相比,具有以下优点
:
该[ProducesResponseType]
属性的Type
属性可以被排除。
隐式转换运营商支持的转换
T
和ActionResult
到ActionResult
。T
转换为
ObjectResult
,表示return new ObjectResult(T);
简化为return T;
。