我的操作装饰有:
[ProducesResponseType(typeof(ValidationException<ErrorEnum>), StatusCodes.Status400BadRequest)]
我需要将生成的响应更改为不同的类型,因此我添加了一个操作过滤器:
public class ValidationExceptionFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (context.ApiDescription.ActionDescriptor is ControllerActionDescriptor cad)
{
var returnType = cad.MethodInfo.ReturnType;
if (returnType.IsGenericType && returnType.GetGenericTypeDefinition() == typeof(ValidationException<>))
{
var schema = context.SchemaGenerator.GenerateSchema(typeof(ValidationExceptionDto), context.SchemaRepository);
foreach (var item in operation.Responses["400"].Content)
item.Value.Schema = schema;
}
}
}
}
但是在生成swagger json时泛型类型并没有被替换,我在这里遗漏了什么?
1条答案
按热度按时间q35jwt9p1#
使用这一行,你将得到方法的返回类型:
例如,控制器如:
您将获得IEnumerable WeatherForecast类型,而不是Some或WeatherForecast类型
我尝试获取方法上的ProducesResponseTypeAttribute并访问Type属性:
响应类型已修改:
json文件: