1

我正在尝试将 Swagger 集成到一个有点大的香草 ASP.NET MVC 应用程序中。读完这篇文章后,我打算使用 Swashbuckle 或 NSwag 。问题是我的控制器是从通用基类继承而来的,如下所示:

public class BookController : BaseController<Book>

然后我在基类中有一个 GET 方法:

public abstract class BaseController<T> : ApiController where T : SomeEntityConstraint
{
    ...
    public virtual IHttpActionResult Get(int id)
    {
        T queryResult = _repository.Get(id)
        ...
        return Ok(queryResult);
    }
}

我正计划向[SwaggerResponse(HttpStatusCode.OK, typeof(T))]一个方法添加属性,这就是我很难 CSharp 的地方。显然不能简单地在属性中使用泛型类型参数。它们必须在编译时已知。

可以从这里看到 ASP.NET Core 有一个整洁的ActionResult<TValue>类。但是我在普通的 ASP.NET 中找不到替代品。我想知道在这种情况下我能做些什么,而不会在具体的 Controller 类实现中引入不必要的耦合和方法覆盖,或者将项目移动到全新的 ASP.NET Core。

4

1 回答 1

0

我很确定你可以实现一个自己的 ActionResult 类,它继承自 IHttpActionResult 并充当代理......我认为 NSwag 会像它是 ASP.NET Core 一样选择它......

免责声明:我是 NSwag 的开发者之一......

于 2018-06-15T21:18:46.433 回答