Closed SanchoWalden closed 4 years ago
你好,经过研究是可以实现的,参考代码:
#region 实现添加自定义描述时过滤不属于同一个分组的API
// 当前分组名称
var groupName = context.ApiDescriptions.FirstOrDefault().GroupName;
// 当前所有的API对象
var apis = context.ApiDescriptions.GetType().GetField("_source", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(context.ApiDescriptions) as IEnumerable<ApiDescription>;
// 不属于当前分组的所有Controller
// 注意:配置的OpenApiTag,Name名称要与Controller的Name对于才会生效。
var controllers = apis.Where(x => x.GroupName != groupName).Select(x => ((ControllerActionDescriptor)x.ActionDescriptor).ControllerName).Distinct();
// 筛选一下tags
swaggerDoc.Tags = tags.Where(x => !controllers.Contains(x.Name)).OrderBy(x => x.Name).ToList();
#endregion
@Meowv Thx.这是很棒的解决方案。
您好,楼主;为什么我这边继承了IDocumentFilter 后;但是还是无法实现分组;所有分组显示的都是所有的接口API?
您好,楼主;为什么我这边继承了IDocumentFilter 后;但是还是无法实现分组;所有分组显示的都是所有的接口API?
注意看看是否应用 https://github.com/Meowv/Blog/blob/master/src/Meowv.Blog.Swagger/MeowvBlogSwaggerExtensions.cs#L115
@Meowv 已经都应用了,我也下载你的源码看过了基本上都有了~
/// <summary>
/// 对应Controller的API文档描述信息
/// </summary>
public class SwaggerDocumentFilter : IDocumentFilter
{
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
var tags = new List<OpenApiTag>
{
new OpenApiTag {
Name = "Auth",
Description = "JWT模式认证授权",
ExternalDocs = new OpenApiExternalDocs { Description = "JSON Web Token" }
}
};
..................
}
上面代码的 swaggerDoc
,我调试你的源码在切换分支的时候你这个地方就就已经将API切分了;而我的代码调试下来这个地方就是所有的没有切分
/// <summary>
/// 获取文章详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
[Authorize]
[Route("admin/post")]
[Route("post/admin")]
[ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
public async Task<ServiceResult<PostForAdminDto>> GetPostForAdminAsync([Required] int id)
{
return await _blogService.GetPostForAdminAsync(id);
}
这种的APIExplorer 处理了 并且也查看过控制器与配置中的一致。也对你了你的代码基本上都有的都有了;但是不同版本就是无法切换,每个版本显示的都是所有的API
@SamuelLiDR 建议仔细检查对比我的代码并调试
@SamuelLiDR 这段代码,OpenApiTag的Name是需要和Controller的name对应的~~~
new OpenApiTag {
Name = "Auth",
Description = "JWT模式认证授权",
ExternalDocs = new OpenApiExternalDocs { Description = "JSON Web Token" }
}
swagger添加描述后,把不属于同一个分组的helloworld过滤掉怎么实现呢