参考文档:
处理 ASP.NET Core Web API 中的错误 | Microsoft Docs
使用 ASP.NET Core 创建 Web API | Microsoft Docs
关于如何输出自定义的验证结果
方式一,直接禁用,然后自己写输出
如下所示,将 SuppressModelStateInvalidFilter 设置为true,
builder.Services.AddControllers()
.ConfigureApiBehaviorOptions(options =>
{
options.SuppressConsumesConstraintForFormFileParameters = true;
options.SuppressInferBindingSourcesForParameters = true;
options.SuppressModelStateInvalidFilter = true;
options.SuppressMapClientErrors = true;
options.ClientErrorMapping[StatusCodes.Status404NotFound].Link =
"https://httpstatuses.com/404";
});
接着,就可以在Action中写逻辑
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
或者自定义一个filter,在filter里面写逻辑,(注:filter可以全局注入或者写在Action上)
public class OutputJsonErrorFilter : IActionFilter
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
context.Result = new JsonResult(APIResult.CreateError(0, error));
....
}
}
}
方式二,改写默认行为处理
builder.Services.AddControllers()
.ConfigureApiBehaviorOptions(options =>
{
options.InvalidModelStateResponseFactory = context =>
new BadRequestObjectResult(context.ModelState)
{
ContentTypes =
{
// using static System.Net.Mime.MediaTypeNames;
Application.Json,
Application.Xml
}
};
})
.AddXmlSerializerFormatters();