Swashbuckle 和 .Net Core Web API – Optional<T> 的展平架构
Swashbuckle and .Net Core Web API – Flatten schema for Optional<T>
我正在使用 Optional 和自定义转换器根据
在资源上实现 PATCH
和 Text.Json
让我们以 DTO 为例:
public class PatchGroupDTO
{
public Optional<string?> Name { get; init; }
public Optional<string?> NickName{ get; init; }
}
Swagger 然后显示 'Example Value'
{
"name": {
"value": "string"
},
"nickName": {
"value": "string"
}
}
和 'Schema':
PatchGroupDTO{
name StringOptional{...}
nickName StringOptional{...}
}
如何实现 Swagger 显示 JSON 的正确输入格式?
{
"name": "string",
"nickName": "string"
}
PatchGroupDTO{
name string nullable:true
nickName string nullable:true
}
是否可以总体上展平所有 Optional 类型?
通过使用 MapType 可以很容易地为 T 的特定实例展平 Optional,使用您的 Optional-type 的解决方案是:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Elwis.API", Version = "v1" });
c.MapType<Optional<Guid?>>(() => new OpenApiSchema { Type = "string", Format = "uuid" });
c.MapType<Optional<DateTime?>>(() => new OpenApiSchema { Type = "string", Format= "date-time" });
c.MapType<Optional<string?>>(() => new OpenApiSchema { Type = "string" });
c.MapType<Optional<bool?>>(() => new OpenApiSchema { Type = "boolean" });
c.MapType<Optional<int?>>(() => new OpenApiSchema { Type = "integer" });
我的解决方案基于:
.
如果您使用可空类型,您还必须映射可空类型,如文章中所述:Swashbuckle MapType<Type> doesn't work with parameters。
这篇文章讨论了“扁平化所有可选类型”的一般问题:How to expose a custom generic type as a string in Swagger schema using Swashbuckle.AspNetCore。
使用自定义 SchemaFilter 似乎是可行的,但我从未尝试过,建议通过映射程序中所需的具体实例来留下来。
我正在使用 Optional
PATCH
和 Text.Json
让我们以 DTO 为例:
public class PatchGroupDTO
{
public Optional<string?> Name { get; init; }
public Optional<string?> NickName{ get; init; }
}
Swagger 然后显示 'Example Value'
{
"name": {
"value": "string"
},
"nickName": {
"value": "string"
}
}
和 'Schema':
PatchGroupDTO{
name StringOptional{...}
nickName StringOptional{...}
}
如何实现 Swagger 显示 JSON 的正确输入格式?
{
"name": "string",
"nickName": "string"
}
PatchGroupDTO{
name string nullable:true
nickName string nullable:true
}
是否可以总体上展平所有 Optional
通过使用 MapType 可以很容易地为 T 的特定实例展平 Optional,使用您的 Optional-type 的解决方案是:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Elwis.API", Version = "v1" });
c.MapType<Optional<Guid?>>(() => new OpenApiSchema { Type = "string", Format = "uuid" });
c.MapType<Optional<DateTime?>>(() => new OpenApiSchema { Type = "string", Format= "date-time" });
c.MapType<Optional<string?>>(() => new OpenApiSchema { Type = "string" });
c.MapType<Optional<bool?>>(() => new OpenApiSchema { Type = "boolean" });
c.MapType<Optional<int?>>(() => new OpenApiSchema { Type = "integer" });
我的解决方案基于:
如果您使用可空类型,您还必须映射可空类型,如文章中所述:Swashbuckle MapType<Type> doesn't work with parameters。
这篇文章讨论了“扁平化所有可选类型”的一般问题:How to expose a custom generic type as a string in Swagger schema using Swashbuckle.AspNetCore。
使用自定义 SchemaFilter 似乎是可行的,但我从未尝试过,建议通过映射程序中所需的具体实例来留下来。