【问题标题】:System.Text.Json.JsonException error message triggered when app is running应用运行时触发 System.Text.Json.JsonException 错误消息
【发布时间】:2021-05-10 22:20:49
【问题描述】:

我的 asp.net core web api 应用程序出现问题。我正在使用 docker-compose 来使用 elasticsearch 和 kibana 来读取日志。构建程序时,我没有收到任何错误。但是,一旦我点击运行按钮,它就会给我 System.Text.Json.JsonException 错误消息,它就在线

public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

但是它说它所在的行是一个空行。我可以查看不正确的行吗?不确定该行在哪里缺少它所说的内容,因为当我尝试单击它时,没有任何反应。

Program.cs

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Sinks.Elasticsearch;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ElasticSearchLogs
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseSerilog((context, configuration) =>
                {
                    configuration.Enrich.FromLogContext()
                        .Enrich.WithMachineName()
                        .WriteTo.Console()
                        .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(node: new Uri(context.Configuration["ElasticConfiguration:Uri"]))
                        {
                            IndexFormat = $"{context.Configuration["ApplicationName"]}-logs-{context.HostingEnvironment.EnvironmentName?.ToLower().Replace(".", "-")}-{DateTime.UtcNow:yyyy-MM}",
                            AutoRegisterTemplate = true,
                            NumberOfShards = 2,
                            NumberOfReplicas = 1
                        })
                        .Enrich.WithProperty("Environment", context.HostingEnvironment.EnvironmentName)
                        .ReadFrom.Configuration(context.Configuration);
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

WeatherForecastController.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ElasticSearchLogs.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public IActionResult Get()
        {
            try
            {
                var rng = new Random();
                
                if (rng.Next(0, 5) < 2)
                {
                    throw new Exception("Oops what happened??");
                }

                return Ok(Enumerable.Range(1, 5).Select(index => new WeatherForecast
                {
                    Date = DateTime.Now.AddDays(index),
                    TemperatureC = rng.Next(-20, 55),
                    Summary = Summaries[rng.Next(Summaries.Length)]
                })
                .ToArray());
            }
            catch(Exception ex)
            {
                _logger.LogError(ex, "Something bad happened");
                return new StatusCodeResult(500);
            }
        }
    }
}

appsettings.json

{
  "ApplicationName":  "elastic-search-app",
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Information",
        "System": "Warning"
      }
    }
  },
  "ElasticConfiguration": {
    "Uri": "http://localhost:9200"
  }
  "AllowedHosts": "*"
}

【问题讨论】:

  • 允许的主机前缺少逗号。您可以使用任何在线 JSON 验证器发现这一点。
  • 哇,我没听懂!真的吗?我从来不知道这个,感谢与我分享这个!
  • 公平地说,错误消息还告诉您在哪里查看以及您做错了什么。 ;)

标签: c# docker elasticsearch asp.net-web-api docker-compose


【解决方案1】:

我认为您在配置 json 中缺少逗号

{
  "ApplicationName":  "elastic-search-app",
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Information",
        "System": "Warning"
      }
    }
  },
  "ElasticConfiguration": {
    "Uri": "http://localhost:9200"
  },
  "AllowedHosts": "*"
}

【讨论】:

    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    相关资源
    最近更新 更多