.NET中如何通过模型绑定仅返回错误响应的指定字段
解决方案:返回200状态码的精简验证错误响应
需求
希望在模型验证失败时,返回状态码200的响应,且仅保留验证失败的字段及其错误信息,移除title、status、errors这些外层包装字段。预期响应格式如下:
{ "ID": [ "ID is required" ] }
当前问题
- 使用
ValidationProblemDetails返回200状态码时,会带上多余的外层字段; - 直接返回
actionContext.ModelState能得到正确的字段结构,但状态码是400(Bad Request)。
解决代码
修改Startup.cs中的ApiBehaviorOptions配置,直接将ModelState包装进OkObjectResult即可:
services.Configure<ApiBehaviorOptions>(o => { o.InvalidModelStateResponseFactory = actionContext => { // 直接返回ModelState的键值对结构,并用OkObjectResult指定200状态码 return new OkObjectResult(actionContext.ModelState); }; });
说明
actionContext.ModelState本身的结构就是{ "字段名": ["错误信息列表"] },正好符合需要的精简格式;OkObjectResult会将内容序列化为JSON,并设置响应状态码为200;- 模型上的
[Required]验证特性无需修改,依然保持原有配置:[Required(ErrorMessage = "ID is required")] public string ID { get; set; }
内容的提问来源于stack exchange,提问作者CuriousCode
相关产品推荐
相关产品推荐

