如何从 swagger.json 中删除反引号
How to remove back quote from swagger.json
在我用 ASPNET Core 3.1 编写的 Web 应用程序中,使用 Swashbuckle.AspNetCore (5.2) 生成 OpenApi。我已经打开生成派生 类 by
GeneratePolymorphicSchemas()
在 swagger.json 中,我得到带有反引号 (`) 的 类。所以我的 类
public abstract class CommandResult
{
public abstract IsSuccess {get;}
}
public class SuccessCommandResult
{
public override IsSuccess => true;
}
public class SuccessCommandResult<TData> : SuccessCommand
{
public TData Data {get;set;}
}
最后一个 类 我得到他们的名字 'SuccessCommandResult``1' (有单反引号字符,我加倍以保持漂亮 post fromatting),这对生成有问题TypeScript api 客户端。对于生成前端客户端,我使用 open-api-generator
.
我的问题我如何解决生成问题?
OpenApi 本身不支持泛型,但您可以使用 SchemaId
方法自定义生成的名称,例如
c.SchemaId(t => t.FullName.Contains('`')
? t.FullName.Substring(0, t.FullName.IndexOf('`')) + "OfT"
: t.FullName);
以上内容实际上来自official documentation,参见“修改生成的模式”。
为了补充上面的答案,我 运行 遇到了
的问题
SchemaId already used for different type
当我在 class 文档的通用类型字段中指定了特定的 classes 时。即
[ProducesResponseType(typeof(PagedResult<FirstViewModel>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(PagedResult<SecondViewModel>), StatusCodes.Status200OK)]
为了解决这个问题,我做了以下工作
private string GetSchemaId(Type type)
{
var schemaBase = type.Name.Contains('`')
? type.Name.Substring(0, type.Name.IndexOf('`')) + "OfT"
: type.Name;
if (!type.IsGenericType)
{
return $"{schemaBase}";
}
string? schemaGeneric = "";
if (type.GenericTypeArguments.Length == 0)
{
schemaGeneric = $"<{Guid.NewGuid()}>";
}
schemaGeneric += "<";
for (var i = 0; i < type.GenericTypeArguments.Length; i++)
{
var typeArg = type.GenericTypeArguments.ElementAt(i);
schemaGeneric += GetSchemaId(typeArg);
if (i == type.GenericTypeArguments.Length - 1) continue;
schemaGeneric += ", ";
}
schemaGeneric += ">";
return schemaBase + schemaGeneric;
}
然后这样称呼它
public void Configure(SwaggerGenOptions options)
{
options.CustomSchemaIds(type =>
{
return GetSchemaId(type);
});
}
这将 generate schemas like so in swagger
这适用于将 swagger.json 导入 Visual Studios Connected Services 以自动生成 API 客户端
在我用 ASPNET Core 3.1 编写的 Web 应用程序中,使用 Swashbuckle.AspNetCore (5.2) 生成 OpenApi。我已经打开生成派生 类 by
GeneratePolymorphicSchemas()
在 swagger.json 中,我得到带有反引号 (`) 的 类。所以我的 类
public abstract class CommandResult
{
public abstract IsSuccess {get;}
}
public class SuccessCommandResult
{
public override IsSuccess => true;
}
public class SuccessCommandResult<TData> : SuccessCommand
{
public TData Data {get;set;}
}
最后一个 类 我得到他们的名字 'SuccessCommandResult``1' (有单反引号字符,我加倍以保持漂亮 post fromatting),这对生成有问题TypeScript api 客户端。对于生成前端客户端,我使用 open-api-generator
.
我的问题我如何解决生成问题?
OpenApi 本身不支持泛型,但您可以使用 SchemaId
方法自定义生成的名称,例如
c.SchemaId(t => t.FullName.Contains('`')
? t.FullName.Substring(0, t.FullName.IndexOf('`')) + "OfT"
: t.FullName);
以上内容实际上来自official documentation,参见“修改生成的模式”。
为了补充上面的答案,我 运行 遇到了
的问题SchemaId already used for different type
当我在 class 文档的通用类型字段中指定了特定的 classes 时。即
[ProducesResponseType(typeof(PagedResult<FirstViewModel>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(PagedResult<SecondViewModel>), StatusCodes.Status200OK)]
为了解决这个问题,我做了以下工作
private string GetSchemaId(Type type)
{
var schemaBase = type.Name.Contains('`')
? type.Name.Substring(0, type.Name.IndexOf('`')) + "OfT"
: type.Name;
if (!type.IsGenericType)
{
return $"{schemaBase}";
}
string? schemaGeneric = "";
if (type.GenericTypeArguments.Length == 0)
{
schemaGeneric = $"<{Guid.NewGuid()}>";
}
schemaGeneric += "<";
for (var i = 0; i < type.GenericTypeArguments.Length; i++)
{
var typeArg = type.GenericTypeArguments.ElementAt(i);
schemaGeneric += GetSchemaId(typeArg);
if (i == type.GenericTypeArguments.Length - 1) continue;
schemaGeneric += ", ";
}
schemaGeneric += ">";
return schemaBase + schemaGeneric;
}
然后这样称呼它
public void Configure(SwaggerGenOptions options)
{
options.CustomSchemaIds(type =>
{
return GetSchemaId(type);
});
}
这将 generate schemas like so in swagger
这适用于将 swagger.json 导入 Visual Studios Connected Services 以自动生成 API 客户端