# 进行参数修改
builder.Services.AddSwaggerGen(opt => {});
修改标题
opt.SwaggerDoc("v1", new OpenApiInfo { Title = "Test01", Version = "v1", });
在 header 中加入授权输入的支持
opt.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Name = "JWT",
Type = SecuritySchemeType.Http,
Scheme = "Bearer",
In = ParameterLocation.Header,
Description = "JWT Authorization header using the Bearer scheme.",
});
opt.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer",
},
},
[]
},
});
函数中带有 FromHeader 时显示 header 值输入框
注:已经不再需要扩展,函数中使用 FromHeader 及 Required 时 swagger 界面中自动生成输入框, 只是名称不能使用 Authorization
# 加载扩展
opt.OperationFilter<FromHeaderParameterFilter>();
# 实现扩展
public class FromHeaderParameterFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
operation.Parameters ??= new List<OpenApiParameter>();
var descriptions = context.ApiDescription.ParameterDescriptions;
foreach (var description in descriptions)
{
if (description.ParameterDescriptor is not ControllerParameterDescriptor controllerParameterDescriptor)
{
continue;
}
// 函数参数是否使用了 [FromHeader] 特性, 并且是否使用了 [Required] 特性
var headerAttribute = controllerParameterDescriptor.ParameterInfo.GetCustomAttribute<FromHeaderAttribute>();
var required = controllerParameterDescriptor.ParameterInfo.GetCustomAttribute<RequiredAttribute>() != null;
if (headerAttribute == null)
{
continue;
}
// 使用 [FromHeader] 特性的中的名称,注意不要使用 Authorization , 会与全局设置有兼容问题
var name = string.IsNullOrWhiteSpace(headerAttribute.Name) ? "ApiKey" : headerAttribute.Name;
// 设置输入框的参数
operation.Parameters.Add(new OpenApiParameter
{
Name = name,
In = ParameterLocation.Header,
Description = "api key",
Required = required,
Schema = new OpenApiSchema
{
Type = "string",
/*Default = new OpenApiString("Bearer "),*/
},
});
}
}
}
# FromHeader 的函数自动显示输入框
[HttpPost("asymDecrypt")]
public async Task<ActionResult<string>> AsymDecrypt([FromHeader(Name = "ApiKey")] [Required] string token)
{
var rsa = RSA.Create();
rsa.FromXmlString(PublicAsynKeyXml);
return await ParseJwtTokenAsync(token, new RsaSecurityKey(rsa));
}
加入 注释功能
# 设置编译自动生成 xml 文件
// 获取 XML 文件路径(根据项目名称调整)
var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFilename);
// 启用 XML 注释
opt.IncludeXmlComments(xmlPath);