如何自定义生成的 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 生成一些丑陋的名字之后:ClassAClassBBulkRequestClassAClassBOperation

我不想更改 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>