正在重新格式化默认asp.net核心错误请求错误消息



每当查询参数page无效时,我都会收到以下默认的标准错误消息,其中包含错误的请求响应。

{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"00-ase4556503808167887c13a5978d0b-88001bf112e7555d-00","errors":{"page":["The value ''
is invalid."]}}

类似地,当请求主体是无效的Json时,框架也会以类似的错误消息进行响应。

我正在捕获使用ExceptionFilter在应用程序范围内引发的所有异常。我该如何捕获这些特定的错误请求响应并格式化它们,然后使用自定义错误格式进行响应?我应该使用哪种过滤器、中间件或ModelBinder?

感谢大家的帮助,我结合了上面的评论,解决了这个问题。这并不理想,但效果很好。

第一件事是在StartUp.cs中禁用这样的自动模型绑定过滤器

services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});

然后,我创建了一个操作过滤器,当请求中出现无效参数时,该过滤器将执行:

public override void OnActionExecuting(ActionExecutingContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
var messages = new List<string>();
actionContext.ModelState.ToList().ForEach(argument => 
{
if (argument.Value?.ValidationState == ModelValidationState.Invalid)
{
argument.Value.Errors.ToList().ForEach(error =>
{
messages.Add(error.ErrorMessage);
});
}
});
actionContext.Result = new BadRequestObjectResult(messages);
}
}

这将格式化响应,删除所有跟踪id和URL,只显示您要查找的消息,而不是您可以始终创建错误对象并分配的消息。

相关内容

最新更新