【发布时间】:2018-10-03 09:54:28
【问题描述】:
所以我实现了我的第一个 REST API 应用程序,一切正常,包括 Swagger(我使用了 Swashbuckle 并且可以测试我的 API)
在我阅读的文档中,“...控制器必须从 ApiController... 扩展”。我明白了。但是,我应该如何理解这种说法?我想要做的是避免在我的每个 ApiController 扩展中复制代码。例如,我有两个控制器 - ProductController 和 DeviceController - 两者都扩展了 ApiController。我创建了类BaseController 扩展ApiController。然后我将产品控制器和设备控制器的基类更改为基本控制器
public class BaseController : ApiController
{
}
public class ProductController : BaseController // ApiController
{
}
public class DeviceController : BaseController // ApiController
{
}
1) 一旦我点击 /swagger URL,Swagger 应用程序就会出错。
2) 我真的不希望我的BaseController 服务于任何请求。我想要的只是拥有可以在所有控制器中使用的通用辅助方法,例如ProductController 和DeviceController。
任何建议表示赞赏。
【问题讨论】:
-
应该可以工作。如果您需要有关 Swagger 错误的帮助,edit 您的问题包括 Swagger 错误以及您的研究。
-
继承并不是重用代码的最佳方式。 ASP.NET Core、MVC、Web API,都提供了通过过滤器添加可重用功能的方法。
-
创建自己的基类应该可以工作。如果您不希望它被实例化,您应该声明它
abstract。也许更好的方法是创建可以由任何控制器调用的 C# 扩展方法?或者把那些常用的方法放在“helper”或“utility”类中,在需要时可以使用? -
好吧,我把我的 BaseController 抽象化了,这就成功了。谢谢!
标签: c# .net rest swagger webapi2