Sdílet prostřednictvím


Novinky v ASP.NET Core 5.0

Tento článek popisuje nejvýznamnější změny v ASP.NET Core 5.0 s odkazy na příslušnou dokumentaci.

ASP.NET Core MVC a Razor vylepšení

Vazba modelu DateTime jako UTC

Vazba modelu nyní podporuje vazby časových řetězců UTC na DateTime. Pokud požadavek obsahuje řetězec času UTC, vazba modelu ho sváže s časem UTC DateTime. Například následující časový řetězec je svázán se standardem UTC DateTime: https://example.com/mycontroller/myaction?time=2019-06-14T02%3A30%3A04.0576719Z

Vazby a ověřování modelů s typy záznamů C# 9

Typy záznamů C# 9 lze použít s vazbou modelu v kontroleru MVC nebo Razor stránce. Typy záznamů představují dobrý způsob, jak modelovat přenášená data přes síť.

Například následující PersonController typ záznamu Person používá s vazbou modelu a ověřením formuláře:

public record Person([Required] string Name, [Range(0, 150)] int Age);

public class PersonController
{
   public IActionResult Index() => View();

   [HttpPost]
   public IActionResult Index(Person person)
   {
          // ...
   }
}

Soubor Person/Index.cshtml:

@model Person

Name: <input asp-for="Model.Name" />
<span asp-validation-for="Model.Name" />

Age: <input asp-for="Model.Age" />
<span asp-validation-for="Model.Age" />

Vylepšení dynamicRouteValueTransformer

ASP.NET Core 3.1 zavedl DynamicRouteValueTransformer jako způsob použití vlastního koncového bodu k dynamickému výběru akce kontroleru MVC nebo Razor stránky. ASP.NET aplikace Core 5.0 můžou předat stav DynamicRouteValueTransformer a filtrovat sadu vybraných koncových bodů.

Různé

  • Atribut [Compare] lze použít u vlastností Razor modelu stránky.
  • Parametry a vlastnosti vázané z těla jsou ve výchozím nastavení považovány za povinné.

Webové rozhraní API

Specifikace OpenAPI je ve výchozím nastavení zapnutá

Specifikace OpenAPI je oborový standard pro popis rozhraní HTTP API a jejich integraci do složitých obchodních procesů nebo se třetími stranami. OpenAPI je široce podporován všemi poskytovateli cloudu a mnoha registry rozhraní API. Aplikace, které generují dokumenty OpenAPI z webových rozhraní API, mají řadu nových příležitostí, ve kterých je možné tato rozhraní API použít. Ve spolupráci s správci opensourcového projektu Swashbuckle.AspNetCore obsahuje šablona rozhraní API ASP.NET Core závislost NuGet na Swashbuckle. Swashbuckle je oblíbený opensourcový balíček NuGet, který dynamicky generuje dokumenty OpenAPI. Swashbuckle to dělá úvodem přes kontrolery rozhraní API a generováním dokumentu OpenAPI za běhu nebo v době sestavení pomocí rozhraní příkazového řádku Swashbuckle.

V ASP.NET Core 5.0 šablony webového rozhraní API ve výchozím nastavení povolují podporu OpenAPI. Zakázání OpenAPI:

  • Z příkazového řádku:

      dotnet new webapi --no-openapi true
    
  • V sadě Visual Studio: Zrušte zaškrtnutí políčka Povolit podporu OpenAPI.

Všechny .csproj soubory vytvořené pro projekty webového rozhraní API obsahují odkaz na balíček NuGet Swashbuckle.AspNetCore .

<ItemGroup>
    <PackageReference Include="Swashbuckle.AspNetCore" Version="5.5.1" />
</ItemGroup>

Vygenerovaný kód šablony obsahuje kód Startup.ConfigureServices , který aktivuje generování dokumentů OpenAPI:

public void ConfigureServices(IServiceCollection services)
{

    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApp1", Version = "v1" });
    });
}

Metoda Startup.Configure přidá middleware Swashbuckle, který umožňuje:

  • Proces generování dokumentů
  • Stránka s uživatelským rozhraním Swagger ve výchozím nastavení v režimu vývoje

Vygenerovaný kód šablony nechtěně nezveřejní popis rozhraní API při publikování do produkčního prostředí.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();  // UseSwaggerUI Protected by if (env.IsDevelopment())
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json",
                         "WebApp1 v1"));
    }

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Azure API Management Import

Když ASP.NET projekty rozhraní CORE API povolí OpenAPI, visual Studio 2019 verze 16.8 a novější publikování automaticky nabídne další krok v toku publikování. Vývojáři, kteří používají Azure API Management , mají možnost automaticky importovat rozhraní API do služby Azure API Management během procesu publikování:

Azure API Management Import VS publishing

Lepší prostředí pro spouštění projektů webového rozhraní API

Když je ve výchozím nastavení povolené OpenAPI, výrazně se zlepší prostředí spouštění aplikací (F5) pro vývojáře webového rozhraní API. S ASP.NET Core 5.0 je šablona webového rozhraní API předem nakonfigurovaná tak, aby načetla stránku s uživatelským rozhraním Swagger. Stránka s uživatelským rozhraním Swagger poskytuje dokumentaci přidanou pro publikované rozhraní API a umožňuje testování rozhraní API jediným kliknutím.

swagger/index.html view

Blazor

Zlepšení výkonu

Pro .NET 5 jsme výrazně vylepšili Blazor WebAssembly výkon modulu runtime s konkrétním zaměřením na komplexní vykreslování uživatelského rozhraní a JSserializaci PŘI. V našich testech Blazor WebAssembly výkonnosti je v .NET 5 pro většinu scénářů dvakrát až třikrát rychlejší. Další informace najdete v ASP.NET blogu: aktualizace ASP.NET Core v .NET 5 Release Candidate 1.

Izolace šablon stylů CSS

Blazor nyní podporuje definování stylů CSS, které jsou vymezeny na danou komponentu. Styly CSS specifické pro jednotlivé komponenty usnadňují odůvodnění stylů v aplikaci a zabránění neúmyslným vedlejším efektům globálních stylů. Další informace najdete v tématu ASP.NET Blazor Izolace šablon stylů CSS core.

Nová InputFile komponenta

Komponenta InputFile umožňuje čtení jednoho nebo více souborů vybraných uživatelem k nahrání. Další informace najdete v tématu ASP.NET nahrání souborů CoreBlazor.

Nové InputRadio a InputRadioGroup komponenty

Blazor má integrované InputRadio součásti, InputRadioGroup které zjednodušují datové vazby na skupiny přepínačů s integrovaným ověřováním. Další informace najdete v tématu ASP.NET Blazor základní vstupní komponenty.

Virtualizace komponent

Zlepšení vnímaného výkonu vykreslování komponent pomocí Blazor integrované podpory virtualizace architektury. Další informace najdete v tématu ASP.NET virtualizace komponent CoreRazor.

ontoggle podpora událostí

Blazor události teď podporují ontoggle událost MODELU DOM. Další informace najdete v tématu ASP.NET Zpracování událostí CoreBlazor.

Nastavení fokusu uživatelského rozhraní v Blazor aplikacích

K nastavení fokusu uživatelského rozhraní na tento prvek použijte metodu FocusAsync pohodlí u odkazů na elementy. Další informace najdete v tématu ASP.NET Zpracování událostí CoreBlazor.

Vlastní ověřovací atributy třídy CSS

Atributy vlastních ověřovacích tříd CSS jsou užitečné při integraci s architekturami CSS, například Bootstrap. Další informace najdete v tématu ASP.NET ověřování základních Blazor formulářů.

Podpora IAsyncDisposable

Razor komponenty nyní podporují IAsyncDisposable rozhraní pro asynchronní uvolnění přidělených prostředků.

Izolace JavaScriptu a odkazy na objekty

Blazor umožňuje izolaci JavaScriptu ve standardních modulech JavaScriptu. Další informace najdete v tématu Volání funkcí JavaScriptu z metod .NET v ASP.NET Core Blazor.

Komponenty formulářů podporují zobrazovaný název.

Následující předdefinované komponenty podporují zobrazované názvy s parametrem DisplayName :

  • InputDate
  • InputNumber
  • InputSelect

Další informace najdete v tématu ASP.NET Přehled formulářů CoreBlazor.

Parametry trasy pro zachytávání všech

V komponentách jsou podporovány všechny parametry trasy, které zachycují cesty přes více hranic složek. Další informace najdete v tématu ASP.NET Blazor Základní směrování a navigace.

Vylepšení ladění

Ladění Blazor WebAssembly aplikací se vylepšuje v ASP.NET Core 5.0. Ladění je teď podporováno na Visual Studio pro Mac. Další informace najdete v tématu Ladění aplikací ASP.NET CoreBlazor.

Microsoft Identity v2.0 a MSAL v2.0

Blazor security now uses Microsoft Identity v2.0 (Microsoft.Identity.Web and Microsoft.Identity.Web.UI) and MSAL v2.0. Další informace najdete v tématech v tématu Blazor Zabezpečení a Identity uzel.

Chráněné úložiště prohlížeče pro Blazor Server

Blazor Server Aplikace teď můžou používat integrovanou podporu pro ukládání stavu aplikace v prohlížeči, který je chráněný před manipulací pomocí ochrany dat ASP.NET Core. Data mohou být uložena v místním úložišti prohlížeče nebo v úložišti relací. Další informace najdete v tématu ASP.NET Blazor základní správa stavu.

Blazor WebAssembly předkreslování

Integrace komponent je vylepšená napříč modely hostování a Blazor WebAssembly aplikace teď můžou předem vyústit výstup na serveru.

Vylepšení oříznutí nebo propojení

Blazor WebAssembly provádí oříznutí nebo propojení mezi jazykem IL (Intermediate Language) během sestavení a ořízne nepotřebné il ze výstupních sestavení aplikace. S vydáním ASP.NET Core 5.0 Blazor WebAssembly provádí vylepšené oříznutí s dalšími možnostmi konfigurace. Další informace najdete v tématu Konfigurace oříznutí pro možnosti ASP.NET Core Blazor a Trimming.

Analyzátor kompatibility prohlížeče

Blazor WebAssembly aplikace cílí na celou oblast rozhraní .NET API, ale ne všechna rozhraní API .NET se podporují na WebAssembly kvůli omezením sandboxu prohlížeče. Při spuštění na WebAssembly dojde k vyvolání PlatformNotSupportedException nepodporovaných rozhraní API. Analyzátor kompatibility platformy upozorní vývojáře, když aplikace používá rozhraní API, která nejsou podporována cílovými platformami aplikace. Další informace najdete v tématu Využívání komponent ASP.NET Core Razor z knihovny tříd Razor (RCL).

Opožděná načtení sestavení

Blazor WebAssembly Výkon spuštění aplikace je možné zlepšit odložením načítání některých sestavení aplikace, dokud nebudou potřeba. Další informace naleznete v tématu Opožděné načtení sestavení v ASP.NET Core Blazor WebAssembly.

Aktualizovaná podpora globalizace

Podpora globalizace je k dispozici na Blazor WebAssembly základě mezinárodních komponent pro kódování Unicode (ICU). Další informace najdete v tématu ASP.NET globalizace a lokalizace jádraBlazor.

gRPC

V gRPC bylo provedeno mnoho vylepšení předformance. Další informace najdete v tématu vylepšení výkonu gRPC v .NET 5.

Další informace o gRPC naleznete v tématu Přehled gRPC v .NET.

SignalR

SignalR Filtry centra

SignalR Filtry rozbočovačů, označované jako kanály centra v ASP.NET SignalR, je funkce, která umožňuje spuštění kódu před a po metodách centra. Spouštění kódu před a po metodách centra je podobné tomu, jak má middleware schopnost spouštět kód před a po požadavku HTTP. Mezi běžné použití patří protokolování, zpracování chyb a ověřování argumentů.

Další informace naleznete v tématu Použití filtrů centra v ASP.NET Core SignalR.

SignalR paralelní vyvolání centra

ASP.NET Core SignalR teď dokáže zpracovat vyvolání paralelního centra. Výchozí chování lze změnit tak, aby klienti mohli vyvolat více než jednu metodu centra najednou:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(options =>
    {
        options.MaximumParallelInvocationsPerClient = 5;
    });
}

Přidání podpory messagepacku v SignalR klientovi Java

Nový balíček com.microsoft.signalr.messagepack, přidá podporu MessagePack do SignalR klienta Java. Pokud chcete použít protokol centra MessagePack, přidejte .withHubProtocol(new MessagePackHubProtocol()) ho do tvůrce připojení:

HubConnection hubConnection = HubConnectionBuilder.create(
                           "http://localhost:53353/MyHub")
               .withHubProtocol(new MessagePackHubProtocol())
               .build();

Kestrel

  • Znovu načístelné koncové body prostřednictvím konfigurace: Kestrel může detekovat změny konfigurace předané serveru KestrelServerOptions.Configure a zrušit vazbu z existujících koncových bodů a svázat se s novými koncovými body bez nutnosti restartování aplikace, pokud reloadOnChange je trueparametr . Ve výchozím nastavení se při použití ConfigureWebHostDefaults nebo KestrelCreateDefaultBuildersváže s dílčím oddílem konfigurace "Kestrel" s reloadOnChange povolenou. Aplikace musí být při volání KestrelServerOptions.Configure ručně předávanéreloadOnChange: true, aby se znovu načítá koncové body.

  • Vylepšení hlaviček odpovědí HTTP/2 Další informace najdete v tématu Vylepšení výkonu v další části.

  • Podporadalšíchchch System.Net.SocketsKestrel Podpora vazby k existujícím popisovačům souborů umožňuje používat existující Systemd integraci bez nutnosti libuv přenosu.

  • Vlastní dekódování hlaviček v Kestrel: Aplikace můžou určit, které Encoding se mají použít k interpretaci příchozích hlaviček na základě názvu záhlaví místo výchozího nastavení UTF-8. Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions.RequestHeaderEncodingSelector Nastavte vlastnost tak, aby určila, které kódování se má použít:

    public static IHostBuilder CreateHostBuilder(string[] args) =>
      Host.CreateDefaultBuilder(args)
          .ConfigureWebHostDefaults(webBuilder =>
          {
              webBuilder.ConfigureKestrel(options =>
              {
                  options.RequestHeaderEncodingSelector = encoding =>
                  {
                        return encoding switch
                        {
                            "Host" => System.Text.Encoding.Latin1,
                            _ => System.Text.Encoding.UTF8,
                        };
                  };
              });
              webBuilder.UseStartup<Startup>();
          });
    

Kestrel Možnosti specifické pro koncové body prostřednictvím konfigurace

Byla přidána podpora pro konfiguraci Kestrelmožností specifických pro koncový bod prostřednictvím konfigurace. Konfigurace specifické pro koncový bod zahrnují:

  • Použité protokoly HTTP
  • Použité protokoly TLS
  • Vybraný certifikát
  • Režim klientského certifikátu

Konfigurace umožňuje určit, který certifikát je vybrán na základě zadaného názvu serveru. Název serveru je součástí rozšíření SNI (Server Name Indication) protokolu TLS, jak je uvedeno klientem. KestrelKonfigurace také podporuje předponu zástupných znaků v názvu hostitele.

Následující příklad ukazuje, jak určit konkrétní koncový bod pomocí konfiguračního souboru:

{
  "Kestrel": {
    "Endpoints": {
      "EndpointName": {
        "Url": "https://*",
        "Sni": {
          "a.example.org": {
            "Protocols": "Http1AndHttp2",
            "SslProtocols": [ "Tls11", "Tls12"],
            "Certificate": {
              "Path": "testCert.pfx",
              "Password": "testPassword"
            },
            "ClientCertificateMode" : "NoCertificate"
          },
          "*.example.org": {
            "Certificate": {
              "Path": "testCert2.pfx",
              "Password": "testPassword"
            }
          },
          "*": {
            // At least one sub-property needs to exist per
            // SNI section or it cannot be discovered via
            // IConfiguration
            "Protocols": "Http1",
          }
        }
      }
    }
  }
}

Označení názvu serveru (SNI) je rozšíření TLS, které zahrnuje virtuální doménu jako součást vyjednávání SSL. To znamená, že k identifikaci koncového bodu sítě je možné použít název virtuální domény nebo název hostitele.

Zlepšení výkonu

HTTP/2

  • Výrazné snížení přidělení v cestě kódu HTTP/2.

  • Podpora dynamické komprese HPack hlaviček odpovědí HTTP/2 v Kestrel. Další informace najdete v tématu Velikost tabulky záhlaví a HPACK: tichý vrah (funkce) HTTP/2.

  • Odesílání rámců HTTP/2 PING: HTTP/2 má mechanismus pro odesílání snímků PING, aby se zajistilo, že nečinné připojení je stále funkční. Zajištění přijatelného připojení je zvlášť užitečné při práci s dlouhodobými streamy, které jsou často nečinné, ale jen občas se zobrazují aktivity, například streamy gRPC. Aplikace můžou odesílat pravidelné rámce Kestrel PING nastavením limitů pro KestrelServerOptions:

    public static IHostBuilder CreateHostBuilder(string[] args) =>
      Host.CreateDefaultBuilder(args)
          .ConfigureWebHostDefaults(webBuilder =>
          {
              webBuilder.ConfigureKestrel(options =>
              {
                  options.Limits.Http2.KeepAlivePingInterval =
                                                 TimeSpan.FromSeconds(10);
                  options.Limits.Http2.KeepAlivePingTimeout =
                                                 TimeSpan.FromSeconds(1);
              });
              webBuilder.UseStartup<Startup>();
          });
    

Kontejnery

Před .NET 5.0 se sestavením a publikováním souboru Dockerfile pro aplikaci ASP.NET Core vyžadovalo vyžádání celé sady .NET Core SDK a image ASP.NET Core. V této verzi se zmenší načítání bajtů imagí sady SDK a bajty načítané pro image ASP.NET Core se z velké části eliminují. Další informace najdete v tomto komentáři k problému Na GitHubu.

Ověřování a autorizace

Ověřování Microsoft Entra ID s Microsoftem.Identity Webové

Šablony projektu ASP.NET Core se teď integrují s Microsoft.Identity.Web ověřováním pomocí ID Microsoft Entra. Microsoft .Identity. Webový balíček poskytuje:

  • Lepší prostředí pro ověřování prostřednictvím Microsoft Entra ID.
  • Jednodušší způsob, jak přistupovat k prostředkům Azure jménem uživatelů, včetně Microsoft Graphu. Podívejte se na Microsoft.Identity. Webová ukázka, která začíná základním přihlášením a postupuje prostřednictvím víceklientské architektury, pomocí rozhraní Azure API, pomocí Microsoft Graphu a ochrany vlastních rozhraní API. Microsoft.Identity.Web je k dispozici společně s .NET 5.

Povolit anonymní přístup ke koncovému bodu

Metoda AllowAnonymous rozšíření umožňuje anonymní přístup ke koncovému bodu:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGet("/", async context =>
        {
            await context.Response.WriteAsync("Hello World!");
        })
        .AllowAnonymous();
    });
}

Vlastní zpracování selhání autorizace

Vlastní zpracování selhání autorizace je teď jednodušší díky novému rozhraní IAuthorizationMiddlewareResultHandler, které je vyvoláno autorizačním middlewarem. Výchozí implementace zůstává stejná, ale vlastní obslužnou rutinu je možné zaregistrovat v [injektáž závislostí, která umožňuje vlastní odpovědi HTTP na základě důvodu selhání autorizace. Podívejte se na tuto ukázkuIAuthorizationMiddlewareResultHandler, která demonstruje použití .

Autorizace při použití směrování koncového bodu

Autorizace při použití směrování koncového bodu teď obdrží HttpContext místo instance koncového bodu. To umožňuje autorizačnímu middlewaru přístup k RouteData jiným vlastnostem HttpContext , které nebyly přístupné, i když třída Endpoint . Koncový bod lze načíst z kontextu pomocí kontextu. GetEndpoint.

Řízení přístupu na základě role s ověřováním Kerberos a protokolem LDAP v Linuxu

Zobrazení ověřování kerberos a řízení přístupu na základě role (RBAC)

Vylepšení rozhraní API

JSMetody rozšíření ON pro HttpRequest a HttpResponse

JSData ON lze číst a zapisovat z HttpRequest nových a WriteAsJsonAsync rozšiřujících metod a HttpResponse používat jeReadFromJsonAsync. Tyto rozšiřující metody používají serializátor System.Text.Json ke zpracování JSdat ON. Nová HasJsonContentType metoda rozšíření může také zkontrolovat, jestli má JSpožadavek typ obsahu ON.

JSMetody rozšíření ON je možné kombinovat se směrováním koncových bodů a vytvářet JSrozhraní API ON ve stylu programování, který voláme trasu do kódu. Jedná se o novou možnost pro vývojáře, kteří chtějí vytvořit základní JSrozhraní API on-to jednoduchým způsobem. Například webová aplikace, která má pouze několik koncových bodů, se může rozhodnout, že místo plné funkčnosti ASP.NET Core MVC použije směrování na kód:

endpoints.MapGet("/weather/{city:alpha}", async context =>
{
    var city = (string)context.Request.RouteValues["city"];
    var weather = GetFromDatabase(city);

    await context.Response.WriteAsJsonAsync(weather);
});

System.Diagnostics.Activity

Výchozí formát pro System.Diagnostics.Activity teď je výchozí ve formátu W3C. Díky tomu je podpora distribuovaného trasování ve výchozím nastavení ASP.NET Core interoperabilní s více architekturami.

Pochází zBodyAttribute

FromBodyAttribute teď podporuje konfiguraci možnosti, která umožňuje považovat tyto parametry nebo vlastnosti za volitelné:

public IActionResult Post([FromBody(EmptyBodyBehavior = EmptyBodyBehavior.Allow)]
                          MyModel model)
{
    ...
}

Různá vylepšení

Začali jsme používat poznámky s možnou hodnotou null u ASP.NET základních sestavení. Plánujeme anotovat většinu běžných veřejných rozhraní API rozhraní .NET 5 Framework.

Řízení aktivace spouštěcí třídy

Bylo přidáno další UseStartup přetížení, které umožňuje aplikaci poskytnout metodu továrny pro řízení Startup aktivace třídy. Řízení Startup aktivace třídy je užitečné k předání dalších parametrů Startup , které jsou inicializovány spolu s hostitelem:

public class Program
{
    public static async Task Main(string[] args)
    {
        var logger = CreateLogger();
        var host = Host.CreateDefaultBuilder()
            .ConfigureWebHost(builder =>
            {
                builder.UseStartup(context => new Startup(logger));
            })
            .Build();

        await host.RunAsync();
    }
}

Automatická aktualizace pomocí dotnet watch

V .NET 5 spuštění dotnet watch v projektu ASP.NET Core spustí výchozí prohlížeč a automaticky aktualizuje prohlížeč, protože se v kódu provádějí změny. To znamená, že můžete:

  • Otevřete projekt ASP.NET Core v textovém editoru.
  • Spusťte dotnet watch.
  • Zaměřte se na změny kódu, zatímco nástroje zpracovávají opětovné sestavení, restartování a opětovné načtení aplikace.

Formátovač protokolovacího nástroje konzoly

Vylepšili jsme poskytovatele protokolu konzoly v knihovně Microsoft.Extensions.Logging . Vývojáři teď můžou implementovat vlastní ConsoleFormatter kontrolu nad formátováním a obarvením výstupu konzoly. Rozhraní API formátovače umožňují bohaté formátování implementací podmnožina řídicích sekvencí VT-100. Většina moderních terminálů podporuje VT-100. Nástroj pro protokolování konzoly může parsovat řídicí sekvence na nepodporovaných terminálech, což vývojářům umožňuje vytvořit jeden formátovací modul pro všechny terminály.

JSON Console Logger

Kromě podpory vlastních formátovacích rutin jsme také přidali integrovaný JSformátovací modul ON, který do konzoly generuje strukturované JSprotokoly ON. Následující kód ukazuje, jak přepnout z výchozího protokolovacího nástroje na JSZAPNUTO:

public static IHostBuilder CreateHostBuilder(string[] args) =>
           Host.CreateDefaultBuilder(args)
  .ConfigureLogging(logging =>
  {
     logging.AddJsonConsole(options =>
     {
         options.JsonWriterOptions = new JsonWriterOptions()
         { Indented = true };
     });
  })
  .ConfigureWebHostDefaults(webBuilder =>
  {
    webBuilder.UseStartup<Startup>();
  });

Zprávy protokolu generované do konzoly jsou JSnaformátované:

{
  "EventId": 0,
  "LogLevel": "Information",
  "Category": "Microsoft.Hosting.Lifetime",
  "Message": "Now listening on: https://localhost:5001",
  "State": {
    "Message": "Now listening on: https://localhost:5001",
    "address": "https://localhost:5001",
    "{OriginalFormat}": "Now listening on: {address}"
  }
}