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

如何在带DataAnnotation的C#数据模型中处理Swagger默认数据

解决Swagger默认填充值导致无法测试必填验证的问题

1. 修改Swagger配置,禁用自动示例值填充

在ASP.NET Core项目的Program.cs或Startup.cs中调整Swagger生成配置,移除默认填充的示例值:

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API", Version = "v1" });
    // 添加自定义过滤器移除默认示例
    c.SchemaFilter<ClearDefaultExamplesFilter>();
});

// 自定义SchemaFilter类
public class ClearDefaultExamplesFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        schema.Example = null;
        if (schema.Properties != null)
        {
            foreach (var prop in schema.Properties)
            {
                prop.Value.Example = null;
            }
        }
    }
}

配置后Swagger表单不会预填默认值,提交空表单时字段会被视为未提交,触发[Required]验证。

2. 强化模型验证,覆盖空字符串场景

如果需要同时拦截“字段未提交”和“提交空字符串”两种情况,给属性补充长度验证:

public class UserModel
{
    [Required(ErrorMessage = "FirstName为必填项")]
    [MinLength(1, ErrorMessage = "FirstName不能为空字符串")]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "LastName为必填项")]
    [MinLength(1, ErrorMessage = "LastName不能为空字符串")]
    public string LastName { get; set; }

    [Required(ErrorMessage = "Email为必填项")]
    [EmailAddress(ErrorMessage = "Email格式不正确")]
    [MinLength(1, ErrorMessage = "Email不能为空字符串")]
    public string Email { get; set; }
}

这样无论字段未提交还是提交空值,都会触发对应的验证错误。

3. 手动构造空白请求测试

不想修改配置的话,直接用Swagger的Raw模式:

  • 切换到Swagger请求的Raw标签
  • 将请求体改为{}(空JSON对象)
  • 发送请求,此时所有字段都不会被提交,直接触发必填验证逻辑

也可以用Postman等工具发送空JSON体的POST请求,达到同样的测试效果。

内容的提问来源于stack exchange,提问作者Rajeev Sachdeva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:27:05