Bagikan melalui


Apa yang baru dalam ASP.NET Core 5.0

Artikel ini menyoroti perubahan paling signifikan dalam ASP.NET Core 5.0 dengan tautan ke dokumentasi yang relevan.

ASP.NET Core MVC dan Razor peningkatan

Model mengikat DateTime sebagai UTC

Pengikatan model sekarang mendukung pengikatan string waktu UTC ke DateTime. Jika permintaan berisi string waktu UTC, pengikatan model akan mengikatnya ke UTC DateTime. Misalnya, string waktu berikut terikat UTC DateTime: https://example.com/mycontroller/myaction?time=2019-06-14T02%3A30%3A04.0576719Z

Pengikatan dan validasi model dengan jenis catatan C# 9

Jenis rekaman C# 9 dapat digunakan dengan pengikatan model di pengontrol MVC atau Razor Halaman. Jenis catatan adalah cara yang baik untuk memodelkan data yang dikirimkan melalui jaringan.

Misalnya, berikut ini PersonController menggunakan Person jenis catatan dengan pengikatan model dan validasi formulir:

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

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

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

File Person/Index.cshtml:

@model Person

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

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

Penyempurnaan DynamicRouteValueTransformer

ASP.NET Core 3.1 diperkenalkan DynamicRouteValueTransformer sebagai cara untuk menggunakan titik akhir kustom untuk memilih tindakan pengontrol MVC atau Razor halaman secara dinamis. ASP.NET aplikasi Core 5.0 dapat meneruskan status ke DynamicRouteValueTransformer dan memfilter kumpulan titik akhir yang dipilih.

Lain-lain

  • Atribut [Bandingkan] dapat diterapkan ke properti pada Razor model Halaman.
  • Parameter dan properti yang terikat dari isi dianggap diperlukan secara default.

API Web

Spesifikasi OpenAPI aktif secara default

Spesifikasi OpenAPI adalah standar industri untuk menjelaskan API HTTP dan mengintegrasikannya ke dalam proses bisnis yang kompleks atau dengan pihak ketiga. OpenAPI banyak didukung oleh semua penyedia cloud dan banyak registri API. Aplikasi yang memancarkan dokumen OpenAPI dari API web memiliki berbagai peluang baru di mana API tersebut dapat digunakan. Dalam kemitraan dengan pengelola proyek sumber terbuka Swashbuckle.AspNetCore, templat ASP.NET Core API berisi dependensi NuGet pada Swashbuckle. Swashbuckle adalah paket NuGet sumber terbuka populer yang memancarkan dokumen OpenAPI secara dinamis. Swashbuckle melakukan ini dengan introspeksi atas pengontrol API dan menghasilkan dokumen OpenAPI pada run-time, atau pada waktu build menggunakan CLI Swashbuckle.

Di ASP.NET Core 5.0, templat API web mengaktifkan dukungan OpenAPI secara default. Untuk menonaktifkan OpenAPI:

  • Dari baris perintah:

      dotnet new webapi --no-openapi true
    
  • Dari Visual Studio: Hapus centang Aktifkan dukungan OpenAPI.

Semua .csproj file yang dibuat untuk proyek API web berisi referensi paket Swashbuckle.AspNetCore NuGet.

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

Kode yang dihasilkan templat berisi kode dalam Startup.ConfigureServices yang mengaktifkan pembuatan dokumen OpenAPI:

public void ConfigureServices(IServiceCollection services)
{

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

Metode ini Startup.Configure menambahkan middleware Swashbuckle, yang memungkinkan:

  • Proses pembuatan dokumen.
  • Halaman antarmuka pengguna Swagger secara default dalam mode pengembangan.

Kode yang dihasilkan templat tidak akan secara tidak sengaja mengekspos deskripsi API saat menerbitkan ke produksi.

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();
    });
}

Impor Azure API Management

Saat ASP.NET proyek Core API mengaktifkan OpenAPI, Visual Studio 2019 versi 16.8 dan penerbitan yang lebih baru secara otomatis menawarkan langkah tambahan dalam alur penerbitan. Pengembang yang menggunakan Azure API Management memiliki kesempatan untuk mengimpor API secara otomatis ke Azure API Management selama alur penerbitan:

Penerbitan Azure API Management Import VS

Pengalaman peluncuran yang lebih baik untuk proyek API web

Dengan OpenAPI diaktifkan secara default, pengalaman peluncuran aplikasi (F5) untuk pengembang API web secara signifikan meningkat. Dengan ASP.NET Core 5.0, templat API web telah dikonfigurasi sebelumnya untuk memuat halaman antarmuka pengguna Swagger. Halaman UI Swagger menyediakan dokumentasi yang ditambahkan untuk API yang diterbitkan, dan memungkinkan pengujian API dengan satu klik.

tampilan swagger/index.html

Blazor

Peningkatan performa

Untuk .NET 5, kami melakukan peningkatan signifikan pada performa runtime .NET WebAssembly dengan fokus khusus pada penyajian UI yang kompleks dan serialisasi JSON. Dalam pengujian performa kami, Blazor WebAssembly dalam .NET 5 adalah dua hingga tiga kali lebih cepat untuk sebagian besar skenario. Untuk informasi selengkapnya, lihat blog ASP.NET: pembaruan ASP.NET Core di .NET 5 Release Candidate 1.

Isolasi CSS

Blazor sekarang mendukung penentuan gaya CSS yang tercakup ke komponen tertentu. Gaya CSS khusus komponen mempermudah alasan tentang gaya dalam aplikasi dan untuk menghindari efek samping gaya global yang tidak disengaja. Untuk informasi selengkapnya, lihat isolasi CSS Inti Blazor ASP.NET.

Komponen baru InputFile

Komponen ini InputFile memungkinkan pembacaan satu atau beberapa file yang dipilih oleh pengguna untuk diunggah. Untuk informasi selengkapnya, lihat unggahan file ASP.NET CoreBlazor.

Baru InputRadio dan InputRadioGroup komponen

BlazorInputRadio memiliki komponen bawaan dan InputRadioGroup yang menyederhanakan pengikatan data ke grup tombol radio dengan validasi terintegrasi. Untuk informasi selengkapnya, lihat komponen input ASP.NET CoreBlazor.

Virtualisasi komponen

Tingkatkan performa rendering komponen yang dirasakan menggunakan Blazor dukungan virtualisasi bawaan kerangka kerja. Untuk informasi selengkapnya, lihat virtualisasi komponen ASP.NET CoreRazor.

ontoggle dukungan acara

Blazor acara sekarang mendukung ontoggle acara DOM. Untuk informasi selengkapnya, lihat penanganan peristiwa ASP.NET CoreBlazor.

Mengatur fokus UI di Blazor aplikasi

FocusAsync Gunakan metode kenyamanan pada referensi elemen untuk mengatur fokus UI ke elemen tersebut. Untuk informasi selengkapnya, lihat penanganan peristiwa ASP.NET CoreBlazor.

Atribut kelas CSS validasi kustom

Atribut kelas CSS validasi kustom berguna saat mengintegrasikan dengan kerangka kerja CSS, seperti Bootstrap. Untuk informasi selengkapnya, lihat validasi formulir ASP.NET CoreBlazor.

Dukungan IAsyncDisposable

Razor komponen sekarang mendukung IAsyncDisposable antarmuka untuk rilis asinkron sumber daya yang dialokasikan.

Isolasi JavaScript dan referensi objek

Blazormengaktifkan isolasi JavaScript dalam modul JavaScript standar. Untuk informasi lebih lanjut, lihat Memanggil fungsi JavaScript dari metode .NET di Blazor ASP.NET Core.

Komponen formulir mendukung nama tampilan

Komponen bawaan berikut mendukung nama tampilan dengan DisplayName parameter :

  • InputDate
  • InputNumber
  • InputSelect

Untuk informasi selengkapnya, lihat ringkasan formulir ASP.NET CoreBlazor.

Parameter rute catch-all

Parameter rute catch-all, yang mengambil jalur di beberapa batas folder, didukung dalam komponen. Untuk informasi selengkapnya, lihat perutean dan navigasi ASP.NET CoreBlazor.

Penyempurnaan penelusuran kesalahan

Aplikasi penelusuran kesalahan Blazor WebAssembly ditingkatkan di ASP.NET Core 5.0. Selain itu, penelusuran kesalahan sekarang didukung di Visual Studio untuk Mac. Untuk informasi selengkapnya, lihat Men-debug aplikasi ASP.NET CoreBlazor.

Microsoft Identity v2.0 dan MSAL v2.0

Blazor keamanan sekarang menggunakan Microsoft Identity v2.0 (Microsoft.Identity.Web dan Microsoft.Identity.Web.UI) dan MSAL v2.0. Untuk informasi selengkapnya, lihat topik di Blazor Keamanan dan Identity simpul.

Penyimpanan Browser Terproteksi untuk Blazor Server

Blazor Server aplikasi sekarang dapat menggunakan dukungan bawaan untuk menyimpan status aplikasi di browser yang telah dilindungi dari perubahan menggunakan perlindungan data ASP.NET Core. Data dapat disimpan di penyimpanan browser lokal atau penyimpanan sesi. Untuk informasi selengkapnya, lihat manajemen status ASP.NET CoreBlazor.

Blazor WebAssembly pra-penyajian

Integrasi komponen ditingkatkan di seluruh model hosting, dan Blazor WebAssembly aplikasi sekarang dapat merender output di server.

Peningkatan pemangkasan/penautan

Blazor WebAssembly melakukan pemangkasan/penautan Bahasa Perantara (IL) selama build untuk memangkas IL yang tidak perlu dari rakitan output aplikasi. Dengan rilis ASP.NET Core 5.0, Blazor WebAssembly melakukan pemangkasan yang ditingkatkan dengan opsi konfigurasi tambahan. Untuk informasi selengkapnya, lihat Mengonfigurasi Pemangkas untuk opsi ASP.NET Core Blazor dan Pemangkasan.

Penganalisis kompatibilitas browser

Blazor WebAssembly aplikasi menargetkan area permukaan .NET API penuh, tetapi tidak semua API .NET didukung di WebAssembly karena batasan sandbox browser. API yang tidak didukung ditampilkan PlatformNotSupportedException saat berjalan di WebAssembly. Penganalisis kompatibilitas platform memperingatkan pengembang saat aplikasi menggunakan API yang tidak didukung oleh platform target aplikasi. Untuk informasi lebih lanjut, lihat Menggunakan komponen Razor ASP.NET Core dari pustaka kelas (RCL) Razor.

Rakitan beban malas

Blazor WebAssembly performa startup aplikasi dapat ditingkatkan dengan menukar pemuatan beberapa rakitan aplikasi hingga diperlukan. Untuk informasi selengkapnya, lihat rakitan beban malas di ASP.NET Core Blazor WebAssembly.

Dukungan globalisasi yang diperbarui

Dukungan globalisasi tersedia untuk Blazor WebAssembly didasarkan pada Komponen Internasional untuk Unicode (ICU). Untuk informasi selengkapnya, lihat globalisasi dan pelokalan inti Blazor ASP.NET.

gRPC

Banyak peningkatan preformasi telah dilakukan di gRPC. Untuk informasi selengkapnya, lihat peningkatan performa gRPC di .NET 5.

Untuk informasi gRPC selengkapnya, lihat Gambaran Umum untuk gRPC di .NET.

SignalR

SignalR Filter hub

SignalR Filter hub, yang disebut alur Hub di ASP.NET SignalR, adalah fitur yang memungkinkan kode berjalan sebelum dan sesudah metode Hub dipanggil. Menjalankan kode sebelum dan sesudah metode Hub disebut mirip dengan bagaimana middleware memiliki kemampuan untuk menjalankan kode sebelum dan sesudah permintaan HTTP. Penggunaan umum termasuk pengelogan, penanganan kesalahan, dan validasi argumen.

Untuk informasi selengkapnya, lihat Menggunakan filter hub di ASP.NET Core SignalR.

SignalR pemanggilan hub paralel

ASP.NET Core SignalR sekarang mampu menangani pemanggilan hub paralel. Perilaku default dapat diubah untuk memungkinkan klien memanggil lebih dari satu metode hub pada satu waktu:

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

Menambahkan dukungan Messagepack di SignalR klien Java

Paket baru, com.microsoft.signalr. messagepack, menambahkan dukungan MessagePack ke SignalR klien Java. Untuk menggunakan protokol hub MessagePack, tambahkan .withHubProtocol(new MessagePackHubProtocol()) ke penyusun koneksi:

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

Kestrel

  • Titik akhir yang dapat dimuat ulang melalui konfigurasi: Kestrel dapat mendeteksi perubahan pada konfigurasi yang diteruskan ke KestrelServerOptions.Mengonfigurasi dan membatalkan ikatan dari titik akhir yang ada dan mengikat ke titik akhir baru tanpa memerlukan mulai ulang aplikasi saat reloadOnChange parameter adalah true. Secara default saat menggunakan ConfigureWebHostDefaults atau CreateDefaultBuilder, Kestrel mengikat ke sub bagian konfigurasi "Kestrel" dengan reloadOnChange diaktifkan. Aplikasi harus lulus reloadOnChange: true saat memanggil KestrelServerOptions.Configure secara manual untuk mendapatkan titik akhir yang dapat dimuat ulang.

  • Peningkatan header respons HTTP/2. Untuk informasi selengkapnya, lihat Peningkatan performa di bagian berikutnya.

  • Dukungan untuk jenis titik akhir tambahan di transportasi soket: Menambahkan ke API baru yang diperkenalkan di System.Net.Sockets, soket transportasi default memungkinkan Kestrel pengikatan ke handel file yang ada dan soket domain Unix. Dukungan untuk pengikatan ke handel file yang ada memungkinkan penggunaan integrasi yang ada Systemd tanpa memerlukan libuv transportasi.

  • Decoding header kustom di Kestrel: Aplikasi dapat menentukan mana yang Encoding akan digunakan untuk menginterpretasikan header masuk berdasarkan nama header alih-alih default ke UTF-8. Atur Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions.RequestHeaderEncodingSelector properti untuk menentukan pengodean mana yang akan digunakan:

    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 opsi khusus titik akhir melalui konfigurasi

Dukungan telah ditambahkan untuk mengonfigurasi Kestrelopsi khusus titik akhir melalui konfigurasi. Konfigurasi khusus titik akhir mencakup:

  • Protokol HTTP yang digunakan
  • Protokol TLS yang digunakan
  • Sertifikat dipilih
  • Mode sertifikat klien

Konfigurasi memungkinkan menentukan sertifikat mana yang dipilih berdasarkan nama server yang ditentukan. Nama server adalah bagian dari ekstensi Indikasi Nama Server (SNI) ke protokol TLS seperti yang ditunjukkan oleh klien. KestrelKonfigurasi juga mendukung awalan kartubebas dalam nama host.

Contoh berikut menunjukkan cara menentukan titik akhir khusus menggunakan file konfigurasi:

{
  "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",
          }
        }
      }
    }
  }
}

Indikasi Nama Server (SNI) adalah ekstensi TLS untuk menyertakan domain virtual sebagai bagian dari negosiasi SSL. Apa artinya ini secara efektif adalah bahwa nama domain virtual, atau nama host, dapat digunakan untuk mengidentifikasi titik akhir jaringan.

Peningkatan performa

HTTP/2

  • Pengurangan alokasi yang signifikan di jalur kode HTTP/2.

  • Dukungan untuk kompresi dinamis HPack header respons HTTP/2 di Kestrel. Untuk informasi selengkapnya, lihat Ukuran tabel header dan HPACK: pembunuh senyap (fitur) HTTP/2.

  • Mengirim bingkai PING HTTP/2: HTTP/2 memiliki mekanisme untuk mengirim bingkai PING untuk memastikan koneksi diam masih berfungsi. Memastikan koneksi yang layak sangat berguna ketika bekerja dengan aliran berumur panjang yang sering menganggur tetapi hanya melihat aktivitas sesekali, misalnya, aliran gRPC. Aplikasi dapat mengirim bingkai PING berkala dengan Kestrel mengatur batas pada 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>();
          });
    

Kontainer

Sebelum .NET 5.0, membuat dan menerbitkan Dockerfile untuk aplikasi ASP.NET Core yang diperlukan untuk menarik seluruh .NET Core SDK dan gambar ASP.NET Core. Dengan rilis ini, menarik byte gambar SDK berkurang dan byte yang ditarik untuk gambar ASP.NET Core sebagian besar dihilangkan. Untuk informasi selengkapnya, lihat komentar masalah GitHub ini.

Autentikasi dan otorisasi

Autentikasi ID Microsoft Entra dengan Microsoft.Identity. Web

Templat proyek ASP.NET Core sekarang diintegrasikan dengan Microsoft.Identity.Web untuk menangani autentikasi dengan ID Microsoft Entra. Microsoft .Identity. Paket web menyediakan:

  • Pengalaman yang lebih baik untuk autentikasi melalui ID Microsoft Entra.
  • Cara yang lebih mudah untuk mengakses sumber daya Azure atas nama pengguna Anda, termasuk Microsoft Graph. Lihat Microsoft.Identity. Sampel web, yang dimulai dengan login dasar dan maju melalui multi-penyewaan, menggunakan Api Azure, menggunakan Microsoft Graph, dan melindungi API Anda sendiri. Microsoft.Identity.Web tersedia bersama .NET 5.

Perbolehkan akses anonim ke titik akhir

Metode AllowAnonymous ekstensi memungkinkan akses anonim ke titik akhir:

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();
    });
}

Penanganan kustom kegagalan otorisasi

Penanganan kustom kegagalan otorisasi sekarang lebih mudah dengan antarmuka IAuthorizationMiddlewareResultHandler baru yang dipanggil oleh Middleware otorisasi. Implementasi default tetap sama, tetapi handler kustom dapat didaftarkan dalam [Injeksi Dependensi, yang memungkinkan respons HTTP kustom berdasarkan mengapa otorisasi gagal. Lihat sampel ini yang menunjukkan penggunaan IAuthorizationMiddlewareResultHandler.

Otorisasi saat menggunakan perutean titik akhir

Otorisasi saat menggunakan perutean titik akhir sekarang menerima daripada instans HttpContext titik akhir. Ini memungkinkan middleware otorisasi untuk mengakses RouteData dan properti lain dari HttpContext yang tidak dapat diakses melalui Endpoint kelas . Titik akhir dapat diambil dari konteks menggunakan konteks. GetEndpoint.

Kontrol akses berbasis peran dengan autentikasi Kerberos dan LDAP di Linux

Lihat Autentikasi Kerberos dan kontrol akses berbasis peran (RBAC)

Peningkatan API

Metode ekstensi JSON untuk HttpRequest dan HttpResponse

Data JSON dapat dibaca dan ditulis dari HttpRequest dan HttpResponse menggunakan metode baru ReadFromJsonAsync dan WriteAsJsonAsync ekstensi. Metode ekstensi ini menggunakan serializer System.Text.Json untuk menangani data JSON. Metode ekstensi baru HasJsonContentType juga dapat memeriksa apakah permintaan memiliki jenis konten JSON.

Metode ekstensi JSON dapat dikombinasikan dengan perutean titik akhir untuk membuat API JSON dalam gaya pemrograman yang kami panggil rute ke kode. Ini adalah opsi baru bagi pengembang yang ingin membuat API JSON dasar dengan cara yang ringan. Misalnya, aplikasi web yang hanya memiliki beberapa titik akhir dapat memilih untuk menggunakan rute ke kode daripada fungsionalitas penuh ASP.NET Core MVC:

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

Format default untuk System.Diagnostics.Activity saat ini default ke format W3C. Ini membuat dukungan pelacakan terdistribusi di ASP.NET Core dapat dioperasikan dengan lebih banyak kerangka kerja secara default.

FromBodyAttribute

FromBodyAttribute sekarang mendukung konfigurasi opsi yang memungkinkan parameter atau properti ini dianggap opsional:

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

Perbaikan lain-lain

Kami telah mulai menerapkan anotasi nullable ke ASP.NET rakitan Core. Kami berencana untuk membuat anotasi sebagian besar permukaan API publik umum dari kerangka kerja .NET 5.

Mengontrol aktivasi kelas Startup

Kelebihan beban tambahan UseStartup telah ditambahkan yang memungkinkan aplikasi menyediakan metode pabrik untuk mengontrol Startup aktivasi kelas. Mengontrol Startup aktivasi kelas berguna untuk meneruskan parameter tambahan ke Startup yang diinisialisasi bersama dengan host:

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();
    }
}

Refresh otomatis dengan dotnet watch

Di .NET 5, menjalankan dotnet watch pada proyek ASP.NET Core meluncurkan browser default dan me-refresh browser secara otomatis saat perubahan dilakukan pada kode. Ini berarti Anda dapat:

  • Buka proyek ASP.NET Core di editor teks.
  • Jalankan dotnet watch.
  • Fokus pada perubahan kode saat alat menangani pembangunan kembali, menghidupkan ulang, dan memuat ulang aplikasi.

Pencatat Pencatat Konsol

Penyempurnaan telah dilakukan pada penyedia log konsol di Microsoft.Extensions.Logging pustaka. Pengembang sekarang dapat menerapkan kustom ConsoleFormatter untuk menjalankan kontrol penuh atas pemformatan dan pewarnaan output konsol. API formatter memungkinkan pemformatan kaya dengan menerapkan subset urutan escape VT-100. VT-100 didukung oleh sebagian besar terminal modern. Pencatat konsol dapat mengurai urutan escape pada terminal yang tidak didukung yang memungkinkan pengembang untuk menulis satu formatter untuk semua terminal.

Pencatat Konsol JSON

Selain dukungan untuk formatter kustom, kami juga telah menambahkan formatter JSON bawaan yang memancarkan log JSON terstruktur ke konsol. Kode berikut menunjukkan cara beralih dari pencatat default ke JSON:

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>();
  });

Pesan log yang dipancarkan ke konsol diformat JSON:

{
  "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}"
  }
}