莫问前程 2020-04-30
源码:https://github.com/1259724620/hqh.project20200501.git
一、web项目添加swagger包Swashbuckle.AspNetCore
二、在Web项目模块类WebModule.cs文件添加如下代码
三、在web项目新建文件夹swagger并添加如下几个类
/// <summary> /// 枚举参数示例 /// </summary> public class EnumSchemaFilter : ISchemaFilter { /// <summary> /// 设置枚举显示 /// </summary> /// <param name="schema"></param> /// <param name="context"></param> public void Apply(OpenApiSchema schema, SchemaFilterContext context) { var enumType = context.Type.GetNonNullableType(); if (enumType.IsEnum) { var extensions = new Dictionary<string, IOpenApiExtension>(); foreach (Enum value in Enum.GetValues(enumType)) { var display = value.DisplayName(); extensions.Add(Convert.ToInt32(value).ToString("G"), new OpenApiString(string.IsNullOrWhiteSpace(display) ? "" : ":" + display)); } schema.Extensions = extensions; if (string.IsNullOrWhiteSpace(schema.Description)) { schema.Description = enumType.DisplayDescription(); } } } }
/// <summary> /// 隐藏Swagger Api特性 /// </summary> [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public class SwaggerIgnoreAttribute : Attribute { }
/// <summary> /// Swagger Api 过滤器 /// </summary> public class SwaggerIgnoreFilter : IDocumentFilter { /// <summary> /// /// </summary> /// <param name="swaggerDoc"></param> /// <param name="context"></param> public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) { var ignoreApis = context.ApiDescriptions.Where(m => m.RelativePath.StartsWith("Abp") || m.RelativePath.StartsWith("api/abp") || (m.TryGetMethodInfo(out MethodInfo methodInfo) && methodInfo.CustomAttributes.Any(info => info.AttributeType == typeof(SwaggerIgnoreAttribute)))); if (ignoreApis != null) { foreach (var ignoreApi in ignoreApis) { swaggerDoc.Paths.Remove("/" + ignoreApi.RelativePath); } } } }
四、修改controller下面的控制器
新建一个BaseController,如下代码,记得添加路由标记属性,否则swagger不会显示
/// <summary> /// 基础控制器 /// </summary> [Route("v1/api/[controller]")] public class BaseController: AbpController { }
修改UserController,HomeController继承为BaseController,如下
/// <summary> /// 用户控制器 /// </summary> public class UserController : BaseController { /// <summary> ///新增或编辑用户 /// </summary> /// <returns></returns> [HttpPost("AddEditUser")] public async Task<Result> AddEditUser([FromBody]AddEditUserDto input, [FromServices]IUserService service) { return await service.AddEditUser(input); } }
public class HomeController: BaseController { /// <summary> /// /// </summary> /// <returns></returns> public IActionResult Index() { return Redirect("~/swagger"); } }
五、设置web项目,dto项目,service项目属性
选中项目-->属性-->生成,然后如下栏位勾选保存即可
六、运行,如下,并调用接口成功