2020-10-21 在一技术群里看到有个大佬想用 swagger 实现个功能:基础 Api 项目中写好通用的接口,配置好 swagger .上级项目直接引用项目,就能访问 swagger 起来用。相当于不用重新配置 swagger 和重写部分接口。
然后我就开始捣鼓,折腾了。
直接VS 创建 2个 .net 4.5 的 api 项目。
在基础项目 nuget 装上 Swashbuckle 。
然后想到了之前做项目的时候,项目引用时路由冲突的常见问题,就直接把基础项目里的 HomeController 给去掉了,相当于纯基础 API 项目,也是为了防止默认的 /Home/Index 路由规则冲突,留着只是祸害就直接干掉了。
接下来就是改一下 TestBaseApi 的 App_Start 里的 SwaggerConfig.cs 文件。
注释自行看着办,我是全清了。留太多眼花,已经看过好几次了。
直接给内部的 Register 方法加点东西。
public static void Register() { var thisAssembly = typeof(SwaggerConfig).Assembly; GlobalConfiguration.Configuration .EnableSwagger(c => { c.SingleApiVersion("v1", "BaseApiSwagger"); var files = System.IO.Directory.GetFiles(string.Format(@"{0}in\", System.AppDomain.CurrentDomain.BaseDirectory), "*.xml"); foreach (var item in files) { var tempFile = System.IO.File.OpenRead(item); if (tempFile.Name.Count(d => d == '.') == 1) { c.IncludeXmlComments(item); } } }) .EnableSwaggerUi(c => { }); }
直接粗暴找到 项目名.xml 去读取 API 控制器的 XML 文件,这儿只做实现,不做优化.
接下来 把 TestBaseApi 引用到 TestExtApi 里。
为了方便看效果,把 TestExtApi 里默认的 ValueController 改为了 Value1Controller .
编译,F5跑起来看效果。
嗯,看起来问题不大,事实证明是可行的。这样就简单结束 了。
后续:
其实我想过好几个问题:
1。新项目,想自定义 swagger 名称怎么办?
2。新项目,需要自定义 js 怎么办?像普通的 swagger 写个内嵌的 js ,它能正常识别到么?
3。新项目,想配置部分 swagger 参数的时候又应该怎么办?
这几个问题,我得好好试试才知道答案。