public override void OnActionExecuting(ActionExecutingContext context) { if (!context.ModelState.IsValid) { var logMessage = new System.Text.StringBuilder("{", 128); logMessage.AppendFormat("\"api\":\"{0}\"", context.HttpContext.Request.Path); var apiError = new ApiError(400); foreach (var pair in context.ModelState) { var key = pair.Key; logMessage.AppendFormat(",\"invalidField\":\"{0}\"", key); foreach (var error in pair.Value.Errors) { apiError.AddErrorDetail(error.ErrorMessage, key); } } logMessage.Append("}"); context.Result = new BadRequestObjectResult(new { Error = apiError }); if (_logger != null) { _logger.LogWarning(logMessage.ToString()); } } }