CSharp.Template/YuanXuan.IM.Api/CollectionExtensions/SwaggerServiceCollectionExt...

88 lines
3.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using LearningOfficer.OA.Mobile.Api.Filters;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
namespace YuanXuan.IM.Api.CollectionExtensions
{
public static class SwaggerServiceCollectionExtensions
{
/// <summary>
/// Swagger注入
/// </summary>
/// <param name="services"></param>
public static void AddSwagger(this IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "OA移动端Api",
Version = "v1"
});
// v2 文档
c.SwaggerDoc("v2", new OpenApiInfo
{
Title = "OA移动端Api",
Version = "v2"
});
// v3 文档
c.SwaggerDoc("v3", new OpenApiInfo
{
Title = "OA移动端Api",
Version = "v3"
});
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
{
Description = "在下框中输入请求头中需要添加Jwt授权TokenBearer {Token},注意中间有空格",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
BearerFormat = "JWT",
Scheme = "Bearer"
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference {
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new string[] { }
}
});
c.SupportNonNullableReferenceTypes();
c.ParameterFilter<NullableParameterFilter>();
// 获取主项目生成的 XML 文件路径
var mainXmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var mainXmlPath = Path.Combine(AppContext.BaseDirectory, mainXmlFile);
c.IncludeXmlComments(mainXmlPath, includeControllerXmlComments: true);
// 获取所有引用的类库 XML 文件路径
var referencedAssemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
foreach (var assemblyName in referencedAssemblies)
{
var libraryXmlPath = Path.Combine(AppContext.BaseDirectory, $"{assemblyName.Name}.xml");
if (File.Exists(libraryXmlPath))
{
c.IncludeXmlComments(libraryXmlPath);
}
}
});
}
}
}