添加模块类MeowvBlogSwaggerModule.cs,依赖MeowvBlogDomainModule模块,并且重写ConfigureServices和OnApplicationInitialization方法,不知道这是什么的,可以看文档:https://docs.abp.io/zh-Hans/abp/latest/Module-Development-Basics
然后新建一个扩展类MeowvBlogSwaggerExtensions.cs,编写两个扩展方法AddSwagger和UseSwaggerUI。
在AddSwagger方法中引用我们的XML文件,配置接口的名称版本以及描述信息,在UseSwaggerUI方法中使用SwaggerUI,代码如下:
//MeowvBlogSwaggerExtensions.cs using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.OpenApi.Models; using System; using System.IO; namespace Meowv.Blog.Swagger { public static class MeowvBlogSwaggerExtensions { public static IServiceCollection AddSwagger(this IServiceCollection services) { return services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Version = "1.0.0", Title = "我的接口啊", Description = "接口描述" }); options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Meowv.Blog.HttpApi.xml")); options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Meowv.Blog.Domain.xml")); options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Meowv.Blog.Application.Contracts.xml")); }); } public static void UseSwaggerUI(this IApplicationBuilder app) { app.UseSwaggerUI(options => { options.SwaggerEndpoint($"/swagger/v1/swagger.json", "默认接口"); }); } } }随后便可以在模块MeowvBlogDomainModule中引用了
//MeowvBlogSwaggerModule.cs using Meowv.Blog.Domain; using Microsoft.AspNetCore.Builder; using Volo.Abp; using Volo.Abp.Modularity; namespace Meowv.Blog.Swagger { [DependsOn(typeof(MeowvBlogDomainModule))] public class MeowvBlogSwaggerModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddSwagger(); } public override void OnApplicationInitialization(ApplicationInitializationContext context) { context.GetApplicationBuilder().UseSwagger().UseSwaggerUI(); } } }最后在.HttpApi.Hosting层的的启动模块中引用一下。
//MeowvBlogHttpApiHostingModule.cs ... [DependsOn( typeof(AbpAspNetCoreMvcModule), typeof(AbpAutofacModule), typeof(MeowvBlogHttpApiModule), typeof(MeowvBlogSwaggerModule), typeof(MeowvBlogFrameworkCoreModule) )] public class MeowvBlogHttpApiHostingModule : AbpModule { ... } ...Ctrl + Shift + B生成解决方案,Ctrl+F5打开 .../swagger/index.html 看看效果,上面有一个坑没有填,不知道大家发现了没有,Meowv.Blog.HttpApi.xml没有生成,启动是是会报错的,大家按照之前的方法自行生成XML即可。
棒!预期已经达到了。Swagger之所以想单独创建一个项目是因为还涉及到很多内容,如接口分组、JWT授权、还有Swagger文档描述信息的Filter等。
项目中还剩下.BackgroundJobs层没有处理,此层准备集成Hangfire做一个定时任务处理的,后面会慢慢用起来的。
现在再回头看看,项目是不是很清爽? 没有乱七八糟的东西,有的只是我们需要的。
此时的层级目录,以供参考。
项目中可能有许多不是很合理的地方,请酌情参考。因为大佬们都不愿意出来分享,所以我们渣渣只能做到这种程度,如果有错误欢迎指正,谢谢。
开源地址:https://github.com/Meowv/Blog/tree/blog_tutorial