You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core Web API:配置Swagger为自定义验证属性显示红星

解决Swagger为自定义GuidNotEmpty特性显示红星的问题

要让Swagger识别自定义的GuidNotEmpty特性并显示必填红星,需要通过自定义Schema过滤器告诉Swagger该属性为必填项,具体步骤如下:

1. 实现ISchemaFilter

创建一个Schema过滤器类,扫描属性上的GuidNotEmpty特性,将对应的属性标记为必填:

using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Reflection;

public class GuidNotEmptySchemaFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        if (context.Type is null) return;

        // 获取当前类型的所有公开实例属性
        var properties = context.Type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
        foreach (var property in properties)
        {
            // 检查属性是否带有GuidNotEmpty特性
            if (property.GetCustomAttribute<GuidNotEmptyAttribute>() != null)
            {
                // 适配JsonPropertyName等特性,获取Swagger中实际显示的属性名
                var propertyName = context.ApiDescription.ParameterDescriptions
                    .FirstOrDefault(p => p.Name == property.Name)?
                    .Name ?? property.Name;

                if (schema.Properties.TryGetValue(propertyName, out var propertySchema))
                {
                    // 标记属性为必填
                    propertySchema.Required = true;
                    // 将属性名加入Schema的必填集合
                    if (!schema.Required.Contains(propertyName))
                    {
                        schema.Required.Add(propertyName);
                    }
                }
            }
        }
    }
}

2. 注册Schema过滤器到Swagger服务

在Program.cs的Swagger配置中,添加这个自定义过滤器:

builder.Services.AddSwaggerGen(c =>
{
    // 其他Swagger配置(如文档标题、版本等)
    c.SchemaFilter<GuidNotEmptySchemaFilter>();
});

3. 可选:补充属性描述(可选)

如果需要在Swagger的属性说明里体现自定义验证规则,可以在Schema过滤器中补充描述,或者直接给GuidNotEmptyAttribute添加SwaggerSchema特性:

// 方式1:在过滤器中添加描述
propertySchema.Description += " (不能为Guid.Empty)";

// 方式2:给自定义特性添加SwaggerSchema特性
[AttributeUsage(AttributeTargets.Property)]
[SwaggerSchema(Description = "不能为Guid.Empty的必填值")]
public class GuidNotEmptyAttribute : ValidationAttribute
{
    // 原有验证逻辑...
}

完成以上配置后,带有[GuidNotEmpty]特性的Guid属性,在Swagger的Schema中就会显示必填红星,同时后端的空Guid验证逻辑依然正常生效。

内容的提问来源于stack exchange,提问作者Milad Ahmadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:35:04