Sta*_*tam 6 swagger swagger-ui .net-core swashbuckle.aspnetcore
在 .NET Core 3.1 api 项目中,我集成了 swagger ui。
在 swagger ui 的 Web dto 模式中,我可以看到基本数据注释属性(如Required等StringLength)已应用于属性以进行验证。
如果自定义属性已应用于 Web dto 的属性,我还想显示该属性。
例如:
public class AttachmentGetInfoWebDto
{
[IsNewerThan(minYear: 1928, "You cannot select an attachment older than 1928")]
public int FromYear { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我可以向 的示意图显示AttachmentGetInfoWebDto您不允许传递FromYear小于该属性的值,那就太好了1928。这可能吗?
小智 3
你可以这样做:
创建自定义验证属性,例如 UniqueAttribute
public class UniqueAttribute : ValidationAttribute { ... }
Run Code Online (Sandbox Code Playgroud)
将此属性应用于模型属性
[Unique]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
实现 ISchemaFilter 接口扩展
public class AddUniquenessDescriptionFilter : ISchemaFilter
{
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
var attr = context.MemberInfo?.CustomAttributes.Where(x =>
x.AttributeType.Name == nameof(UniqueAttribute))
.FirstOrDefault();
if (attr is not null)
{
schema.Extensions.Add("isUnique", new OpenApiBoolean(true));
}
}
}
Run Code Online (Sandbox Code Playgroud)
并在启动时使用扩展
builder.Services.AddSwaggerGen(options =>
{
options.SchemaFilter<AddUniquenessDescriptionFilter>();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1087 次 |
| 最近记录: |