如何自定义生成的 Swagger 文件中的非通用 class 名称?
How can I customize the non-generic class names in generated Swagger files?
我在大摇大摆地生成泛型类型名称时遇到了问题。
例如我有以下代码:
public class BulkRequest<T1, T2>
{
public IEnumerable<Operation<T1, T2>> Operations { get; set; }
}
[ProducesResponseType(typeof(BulkRequest<ClassA, ClassB>), StatusCodes.Status200OK)]
并且在 Swagger 生成一些丑陋的名字之后:ClassAClassBBulkRequest
和 ClassAClassBOperation
。
我不想更改 BulkRequest
class 因为它在我们系统的多个地方使用。
那么我们有什么方法可以用 Swagger 生成可读的 class 名称吗?
最后我用CustomSchemaId
解决了这个问题。也许它对面临类似问题的人有用。
归功于 an opened issue,它为我指明了这个方向。
我刚刚在 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>
我在大摇大摆地生成泛型类型名称时遇到了问题。 例如我有以下代码:
public class BulkRequest<T1, T2>
{
public IEnumerable<Operation<T1, T2>> Operations { get; set; }
}
[ProducesResponseType(typeof(BulkRequest<ClassA, ClassB>), StatusCodes.Status200OK)]
并且在 Swagger 生成一些丑陋的名字之后:ClassAClassBBulkRequest
和 ClassAClassBOperation
。
我不想更改 BulkRequest
class 因为它在我们系统的多个地方使用。
那么我们有什么方法可以用 Swagger 生成可读的 class 名称吗?
最后我用CustomSchemaId
解决了这个问题。也许它对面临类似问题的人有用。
归功于 an opened issue,它为我指明了这个方向。
我刚刚在 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>