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:
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.
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 adalahtrue
. Secara default saat menggunakan ConfigureWebHostDefaults atau CreateDefaultBuilder, Kestrel mengikat ke sub bagian konfigurasi "Kestrel" denganreloadOnChange
diaktifkan. Aplikasi harus lulusreloadOnChange: true
saat memanggilKestrelServerOptions.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 memerlukanlibuv
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}"
}
}
ASP.NET Core