Files
simapi-net/SwaggerFilters/AesBodyOperationFilter.cs
T
2025-12-18 09:08:35 +08:00

53 lines
1.9 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 System.Collections.Generic;
using System.Linq;
using Microsoft.OpenApi;
using SimApi.Attributes;
namespace SimApi.SwaggerFilters;
using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Reflection;
/// <summary>
/// 自定义 Swagger 过滤器:将标注 [AesBody] 的参数显示在 Request Body 中
/// </summary>
public class AesBodyOperationFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
foreach (var parameter in context.ApiDescription.ParameterDescriptions)
{
var hasAesBodyAttr = parameter.ParameterInfo()
.GetCustomAttribute<AesBodyAttribute>() != null;
if (!hasAesBodyAttr) continue;
// 1. 移除默认的 Query 参数描述(如果存在)
var queryParam = operation.Parameters
.FirstOrDefault(p => p.Name == parameter.Name);
if (queryParam != null)
{
operation.Parameters.Remove(queryParam);
}
// 2. 添加 Body 参数描述
// 获取参数类型的 SchemaSwagger 模型定义)
var schema = context.SchemaGenerator.GenerateSchema(
parameter.Type,
context.SchemaRepository);
// 将参数添加到 Request Body
operation.RequestBody = new OpenApiRequestBody
{
Content = new Dictionary<string, OpenApiMediaType>
{
{
"application/json", // 假设使用 JSON 格式
new OpenApiMediaType { Schema = schema }
}
},
Description = "内容为加密前内容,需要转换为JSON后使用AES加密后提交,提交格式为 {\"data\":\"AES密文\"}",
Required = true // 标记为必填
};
}
}
}