如何在带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
相关产品推荐
相关产品推荐

