如何自定义生成的Swagger文件中的非泛型类名



我遇到了生成泛型类型名的问题。例如,我有以下代码:

public class BulkRequest<T1, T2>
{
public IEnumerable<Operation<T1, T2>> Operations { get; set; }
}
[ProducesResponseType(typeof(BulkRequest<ClassA, ClassB>), StatusCodes.Status200OK)]

在Swagger生成一些丑陋的名称之后,比如:ClassAClassBBulkRequestClassAClassBOperation

我不想更改BulkRequest类,因为它在我们的系统中的多个地方使用。

那么,我们有办法用Swagger生成可读的类名吗?

最后我使用CustomSchemaId来解决这个问题。也许这对面临类似问题的人有用。

这要归功于一个悬而未决的问题,它为我指明了方向。

我刚刚在Swagger设置中添加了以下CustomSchemaIds

services.AddSwaggerGen(c =>
{
// ... 
c.CustomSchemaIds(i => {
var typeName = type.Name;
if (!type.GetTypeInfo().IsGenericType) {
return typeName;
}
var genericArgumentIds = type.GetGenericArguments()
.Select(t => t.Name)
.ToArray();
return new StringBuilder(typeName)
.Replace($"`{genericArgumentIds.Count()}", string.Empty)
.Append($"<{string.Join(",", genericArgumentIds).TrimEnd(',')}>")
.ToString();
});
});

在这之后,我得到了我想要的格式:

BulkRequest<ClassA,ClassB>

最新更新