如何记录 ASP.NET 核心输入 JSON 序列化错误



我们有 ASP.NET Core应用程序,我们将其用作REST api。方法使用[FromBody]MyClass param作为输入。问题是,如果客户端发送无效的 JSON 字符串,则由于 JSON 序列化错误,input值变为 null。有没有办法记录此类错误?

编辑:我正在寻找应用程序范围的解决方案,而不是每种方法。

我已经通过在 Startup 中添加错误处理程序来解决这个问题.cs:

services.AddMvc()
        .AddJsonOptions(options => {
              options.SerializerSettings.Error = (object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args) =>
              {
                    //Log args.ErrorContext.Error details...
              };
        });

可以使用操作筛选器捕获任何模型绑定错误(包括反序列化错误)。 您可以从 ActionExecutingContext 中提取错误。

编辑:若要使用此方法,需要禁止显示模型状态无效筛选器,因为默认情况下,如果出现绑定错误,Web api 将自动返回 400。 https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.apibehavioroptions.suppressmodelstateinvalidfilter#microsoft-aspnetcore-mvc-apibehavioroptions-suppressmodelstateinvalidfilter

    public class LogModelBindingErrorFilter : IActionFilter
    {
        private readonly ILogger _logger = LogManager.GetCurrentClassLogger();
        public void OnActionExecuting(ActionExecutingContext context)
        {
            if (!context.ModelState.IsValid)
            {
                var messages = context.ModelState.Values
                    .SelectMany(x => x.Errors)
                    .Where(x => x.Exception is JsonException)
                    .Select(x => x.ErrorMessage);
                _logger.Log(LogLevel.Error, string.Join(", ", messages));
            }
        }
        public void OnActionExecuted(ActionExecutedContext context)
        {
        }
    }

相关内容

  • 没有找到相关文章

最新更新