Co nowego w programie ASP.NET Core 5.0
W tym artykule przedstawiono najważniejsze zmiany w programie ASP.NET Core 5.0 z linkami do odpowiedniej dokumentacji.
ASP.NET Core MVC i Razor ulepszenia
Powiązanie modelu DateTime jako UTC
Powiązanie modelu obsługuje teraz powiązanie ciągów czasu UTC z DateTime
. Jeśli żądanie zawiera ciąg czasu UTC, powiązanie modelu wiąże je z godziną UTC DateTime
. Na przykład następujący ciąg czasu jest powiązany z utc DateTime
: https://example.com/mycontroller/myaction?time=2019-06-14T02%3A30%3A04.0576719Z
Powiązanie modelu i walidacja z typami rekordów języka C# 9
Typy rekordów języka C# 9 mogą być używane z powiązaniem modelu w kontrolerze MVC lub na Razor stronie. Typy rekordów to dobry sposób modelowania danych przesyłanych za pośrednictwem sieci.
Na przykład następujące PersonController
elementy używają typu rekordu Person
z powiązaniem modelu i weryfikacją formularza:
public record Person([Required] string Name, [Range(0, 150)] int Age);
public class PersonController
{
public IActionResult Index() => View();
[HttpPost]
public IActionResult Index(Person person)
{
// ...
}
}
Plik 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" />
Ulepszenia elementu DynamicRouteValueTransformer
ASP.NET Core 3.1 wprowadzony DynamicRouteValueTransformer jako sposób używania niestandardowego punktu końcowego do dynamicznego wybierania akcji kontrolera MVC lub Razor strony. ASP.NET aplikacje Core 5.0 mogą przekazywać stan do obiektu DynamicRouteValueTransformer
i filtrować wybrany zestaw punktów końcowych.
Różne
- Atrybut [Compare] można zastosować do właściwości w Razor modelu strony.
- Parametry i właściwości powiązane z treścią są domyślnie uznawane za wymagane.
Internetowy interfejs API
Specyfikacja interfejsu OpenAPI domyślnie włączona
Specyfikacja interfejsu OpenAPI jest standardem branżowym opisującym interfejsy API HTTP i integrowaniem ich ze złożonymi procesami biznesowymi lub z firmami trzecimi. Interfejs OpenAPI jest powszechnie obsługiwany przez wszystkich dostawców usług w chmurze i wiele rejestrów interfejsów API. Aplikacje emitujące dokumenty OpenAPI z internetowych interfejsów API mają różne nowe możliwości, w których można używać tych interfejsów API. We współpracy z opiekunami projektu open source Swashbuckle.AspNetCore szablon interfejsu API platformy ASP.NET Core zawiera zależność NuGet od pakietu Swashbuckle. Swashbuckle to popularny pakiet NuGet typu open source, który dynamicznie emituje dokumenty OpenAPI. Pakiet Swashbuckle wykonuje to przez introspekcja kontrolerów interfejsu API i generowanie dokumentu OpenAPI w czasie wykonywania lub w czasie kompilacji przy użyciu interfejsu wiersza polecenia programu Swashbuckle.
W ASP.NET Core 5.0 szablony internetowego interfejsu API domyślnie obsługują interfejs OpenAPI. Aby wyłączyć interfejs OpenAPI:
Za pomocą wiersza polecenia:
dotnet new webapi --no-openapi true
W programie Visual Studio: usuń zaznaczenie pola wyboru Włącz obsługę interfejsu OpenAPI.
Wszystkie .csproj
pliki utworzone dla projektów internetowego interfejsu API zawierają dokumentację pakietu NuGet Swashbuckle.AspNetCore .
<ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.5.1" />
</ItemGroup>
Wygenerowany kod szablonu zawiera kod, który Startup.ConfigureServices
aktywuje generowanie dokumentu OpenAPI:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApp1", Version = "v1" });
});
}
Metoda Startup.Configure
dodaje oprogramowanie pośredniczące Swashbuckle, które umożliwia:
- Proces generowania dokumentów.
- Strona interfejsu użytkownika struktury Swagger domyślnie w trybie programowania.
Wygenerowany kod szablonu nie uwidacznia przypadkowo opisu interfejsu API podczas publikowania w środowisku produkcyjnym.
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();
});
}
Importowanie usługi Azure API Management
W przypadku włączenia interfejsu OpenAPI projektów interfejsu API core ASP.NET program Visual Studio 2019 w wersji 16.8 lub nowszej automatycznie oferuje dodatkowy krok w przepływie publikowania. Deweloperzy korzystający z usługi Azure API Management mogą automatycznie importować interfejsy API do usługi Azure API Management podczas przepływu publikowania:
Lepsze środowisko uruchamiania projektów internetowego interfejsu API
Po włączeniu interfejsu OpenAPI środowisko uruchamiania aplikacji (F5) dla deweloperów internetowego interfejsu API znacznie się poprawia. W przypadku platformy ASP.NET Core 5.0 szablon internetowego interfejsu API jest wstępnie skonfigurowany do ładowania strony interfejsu użytkownika struktury Swagger. Strona interfejsu użytkownika struktury Swagger zawiera zarówno dokumentację dodaną dla opublikowanego interfejsu API, jak i umożliwia testowanie interfejsów API za pomocą jednego kliknięcia.
Blazor
usprawnienia dotyczące wydajności
W przypadku platformy .NET 5 wprowadziliśmy znaczące ulepszenia wydajności środowiska uruchomieniowego zestawu WebAssembly platformy .NET, koncentrując się na złożonym renderowaniu interfejsu użytkownika i serializacji JSON. W naszych testach Blazor WebAssembly wydajnościowych platforma .NET 5 jest od dwóch do trzech razy szybsza w przypadku większości scenariuszy. Aby uzyskać więcej informacji, zobacz blog ASP.NET: ASP.NET Aktualizacje podstawowe w programie .NET 5 Release Candidate 1.
Izolacja CSS
Blazor Teraz obsługuje definiowanie stylów CSS, które są ograniczone do danego składnika. Style CSS specyficzne dla składników ułatwiają wnioskowanie o stylach w aplikacji i unikanie niezamierzonych skutków ubocznych stylów globalnych. Aby uzyskać więcej informacji, zobacz ASP.NET Core Blazor CSS izolacja.
Nowy InputFile
składnik
Składnik InputFile
umożliwia odczytywanie co najmniej jednego pliku wybranego przez użytkownika do przekazania. Aby uzyskać więcej informacji, zobacz ASP.NET Core file uploads (Przekazywanie plików ASP.NET CoreBlazor).
Nowe InputRadio
i InputRadioGroup
składniki
Blazor ma wbudowane InputRadio
składniki InputRadioGroup
, które upraszczają powiązanie danych z grupami przycisków radiowych ze zintegrowaną walidacją. Aby uzyskać więcej informacji, zobacz ASP.NET Podstawowe Blazor składniki wejściowe.
Wirtualizacja składników
Zwiększ postrzeganą wydajność renderowania składników przy użyciu wbudowanej Blazor obsługi wirtualizacji platformy. Aby uzyskać więcej informacji, zobacz ASP.NET Core component virtualization (Wirtualizacja składników podstawowego systemu ASP.NET CoreRazor).
ontoggle
obsługa zdarzeń
Blazor zdarzenia obsługują ontoggle
teraz zdarzenie DOM. Aby uzyskać więcej informacji, zobacz obsługa zdarzeń ASP.NET CoreBlazor.
Ustawianie fokusu interfejsu użytkownika w Blazor aplikacjach
Użyj metody wygody FocusAsync
w odwołaniach do elementów, aby ustawić fokus interfejsu użytkownika na ten element. Aby uzyskać więcej informacji, zobacz obsługa zdarzeń ASP.NET CoreBlazor.
Niestandardowe atrybuty klasy CSS walidacji
Niestandardowe atrybuty klasy CSS walidacji są przydatne podczas integrowania z platformami CSS, takimi jak Bootstrap. Aby uzyskać więcej informacji, zobacz sprawdzanie poprawności formularzy ASP.NET CoreBlazor.
Obsługa interfejsu IAsyncDisposable
Razor składniki obsługują IAsyncDisposable teraz interfejs dla asynchronicznej wersji przydzielonych zasobów.
Izolacja języka JavaScript i odwołania do obiektów
Blazor umożliwia izolację języka JavaScript w standardowych modułach Języka JavaScript. Aby uzyskać więcej informacji, zobacz Wywoływanie funkcji języka JavaScript z metod platformy .NET na platformie ASP.NET Core Blazor.
Składniki formularza obsługują nazwę wyświetlaną
Następujące wbudowane składniki obsługują nazwy wyświetlane z parametrem DisplayName
:
InputDate
InputNumber
InputSelect
Aby uzyskać więcej informacji, zobacz omówienie formularzy ASP.NET CoreBlazor.
Parametry trasy catch-all
Parametry trasy catch-all, które przechwytują ścieżki w wielu granicach folderów, są obsługiwane w składnikach. Aby uzyskać więcej informacji, zobacz ASP.NET Core Blazor routing i nawigacja.
Ulepszenia debugowania
Ulepszono debugowanie Blazor WebAssembly aplikacji w ASP.NET Core 5.0. Ponadto debugowanie jest teraz obsługiwane w Visual Studio dla komputerów Mac. Aby uzyskać więcej informacji, zobacz Debugowanie aplikacji ASP.NET CoreBlazor.
Microsoft Identity v2.0 i MSAL w wersji 2.0
Blazor zabezpieczenia korzystają teraz z platform Microsoft Identity w wersji 2.0 (Microsoft.Identity.Web
i Microsoft.Identity.Web.UI
) oraz biblioteki MSAL w wersji 2.0. Aby uzyskać więcej informacji, zobacz tematy w temacie Blazor Zabezpieczenia i Identity węzeł.
Magazyn chronionej przeglądarki dla programu Blazor Server
Blazor Server Aplikacje mogą teraz używać wbudowanej obsługi przechowywania stanu aplikacji w przeglądarce, która została chroniona przed manipulowaniem przy użyciu ochrony danych ASP.NET Core. Dane mogą być przechowywane w magazynie przeglądarki lokalnej lub w magazynie sesji. Aby uzyskać więcej informacji, zobacz zarządzanie stanem ASP.NET CoreBlazor.
Blazor WebAssembly prerendering
Integracja składników jest ulepszona w modelach hostingu, a Blazor WebAssembly aplikacje mogą teraz wstępnie prerender danych wyjściowych na serwerze.
Ulepszenia przycinania/łączenia
Blazor WebAssembly Wykonuje przycinanie/łączenie języka pośredniego (IL) podczas kompilacji w celu przycinania niepotrzebnego il z zestawów wyjściowych aplikacji. W wersji ASP.NET Core 5.0 Blazor WebAssembly zapewnia ulepszone przycinanie z dodatkowymi opcjami konfiguracji. Aby uzyskać więcej informacji, zobacz Configure the Trimmer for ASP.NET Core and Trimming options (Konfigurowanie trymmeru dla opcji ASP.NET Core Blazor i Trimming).
Analizator zgodności przeglądarki
Blazor WebAssembly aplikacje są przeznaczone dla pełnego obszaru powierzchni interfejsu API platformy .NET, ale nie wszystkie interfejsy API platformy .NET są obsługiwane w zestawie WebAssembly z powodu ograniczeń piaskownicy przeglądarki. Nieobsługiwane interfejsy API zgłaszane PlatformNotSupportedException podczas uruchamiania w zestawie WebAssembly. Analizator zgodności platformy ostrzega dewelopera, gdy aplikacja korzysta z interfejsów API, które nie są obsługiwane przez platformy docelowe aplikacji. Aby uzyskać więcej informacji, zobacz Korzystanie ze składników platformy ASP.NET Core Razor z biblioteki klas Razor (RCL).
Zestawy ładowania z opóźnieniem
Blazor WebAssembly Wydajność uruchamiania aplikacji można poprawić przez odroczenie ładowania niektórych zestawów aplikacji do momentu ich wymagania. Aby uzyskać więcej informacji, zobacz Ładowanie zestawów z opóźnieniem w programie ASP.NET Core Blazor WebAssembly.
Zaktualizowana obsługa globalizacji
Obsługa globalizacji jest dostępna na Blazor WebAssembly podstawie międzynarodowych składników dla standardu Unicode (ICU). Aby uzyskać więcej informacji, zobacz ASP.NET Core Blazor globalizacji i lokalizacji.
gRPC
W gRPC wprowadzono wiele ulepszeń preformcji. Aby uzyskać więcej informacji, zobacz gRPC performance improvements in .NET 5 (Ulepszenia wydajności usługi gRPC na platformie .NET 5).
Aby uzyskać więcej informacji o gRPC, zobacz Overview for gRPC on .NET (Omówienie usługi gRPC na platformie .NET).
SignalR
SignalR Filtry koncentratora
SignalR Filtry koncentratora nazywane potokami koncentratora w ASP.NET SignalRto funkcja umożliwiająca uruchamianie kodu przed wywołaniami metod centrum i po nim. Uruchamianie kodu przed wywołaniami metod centrum i po nim jest podobne do tego, jak oprogramowanie pośredniczące ma możliwość uruchamiania kodu przed żądaniem HTTP i po nim. Typowe zastosowania obejmują rejestrowanie, obsługę błędów i walidację argumentów.
Aby uzyskać więcej informacji, zobacz Use hub filters in ASP.NET Core (Używanie filtrów centrum w programie ASP.NET Core SignalR).
SignalR wywołania koncentratora równoległego
ASP.NET Core SignalR jest teraz w stanie obsługiwać wywołania koncentratora równoległego. Zachowanie domyślne można zmienić, aby umożliwić klientom wywoływanie więcej niż jednej metody centrum jednocześnie:
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR(options =>
{
options.MaximumParallelInvocationsPerClient = 5;
});
}
Dodano obsługę pakietu Messagepack w SignalR kliencie Java
Nowy pakiet com.microsoft .signalr. messagepack dodaje obsługę pakietu MessagePack do SignalR klienta Java. Aby użyć protokołu centrum MessagePack, dodaj .withHubProtocol(new MessagePackHubProtocol())
go do konstruktora połączeń:
HubConnection hubConnection = HubConnectionBuilder.create(
"http://localhost:53353/MyHub")
.withHubProtocol(new MessagePackHubProtocol())
.build();
Kestrel
Ponowne ładowanie punktów końcowych za pośrednictwem konfiguracji: Kestrel umożliwia wykrywanie zmian konfiguracji przekazanych do KestrelServerOptions.Configure and unbind z istniejących punktów końcowych i wiązać się z nowymi punktami końcowymi bez konieczności ponownego uruchamiania aplikacji, gdy
reloadOnChange
parametr ma wartośćtrue
. Domyślnie w przypadku używania polecenia ConfigureWebHostDefaults lub CreateDefaultBuilderKestrel element wiąże się z podsekcją konfiguracji "Kestrel" z włączoną obsługąreloadOnChange
. Aplikacje muszą być przekazywanereloadOnChange: true
podczas ręcznego wywoływaniaKestrelServerOptions.Configure
w celu uzyskania punktów końcowych z możliwością ponownego ładowania.Ulepszenia nagłówków odpowiedzi HTTP/2. Aby uzyskać więcej informacji, zobacz Ulepszenia wydajności w następnej sekcji.
Obsługa dodatkowych typów punktów końcowych w transporcie gniazd: dodanie do nowego interfejsu API wprowadzonego w System.Net.Socketssystemie , domyślny transport gniazd w Kestrel programie umożliwia powiązanie zarówno z istniejącymi dojściami plików, jak i gniazdami domeny systemu Unix. Obsługa powiązania z istniejącymi uchwytami plików umożliwia korzystanie z istniejącej
Systemd
integracji bez koniecznościlibuv
transportu.Dekodowanie nagłówka niestandardowego w programie Kestrel: Aplikacje mogą określać, które Encoding z nich mają być interpretowane do interpretowania nagłówków przychodzących na podstawie nazwy nagłówka zamiast domyślnej wartości UTF-8. Ustaw właściwość ,
Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions.RequestHeaderEncodingSelector
aby określić, które kodowanie ma być używane: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 opcje specyficzne dla punktu końcowego za pośrednictwem konfiguracji
Dodano obsługę konfigurowania Kestrelopcji specyficznych dla punktu końcowego za pośrednictwem konfiguracji. Konfiguracje specyficzne dla punktu końcowego obejmują następujące elementy:
- Używane protokoły HTTP
- Używane protokoły TLS
- Wybrany certyfikat
- Tryb certyfikatu klienta
Konfiguracja umożliwia określenie wybranego certyfikatu na podstawie określonej nazwy serwera. Nazwa serwera jest częścią rozszerzenia SNI (Server Name Indication) do protokołu TLS wskazanego przez klienta. KestrelKonfiguracja programu obsługuje również prefiks wieloznaczny w nazwie hosta.
W poniższym przykładzie pokazano, jak określić punkt końcowy specyficzny dla danego punktu końcowego przy użyciu pliku konfiguracji:
{
"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",
}
}
}
}
}
}
Wskazanie nazwy serwera (SNI) to rozszerzenie protokołu TLS do uwzględnienia domeny wirtualnej w ramach negocjacji protokołu SSL. Oznacza to, że nazwa domeny wirtualnej lub nazwa hosta może służyć do identyfikowania punktu końcowego sieci.
usprawnienia dotyczące wydajności
HTTP/2
Znaczne zmniejszenie alokacji w ścieżce kodu HTTP/2.
Obsługa dynamicznej kompresji HPack nagłówków odpowiedzi HTTP/2 w pliku Kestrel. Aby uzyskać więcej informacji, zobacz Rozmiar tabeli nagłówka i HPACK: cichy zabójca (funkcja) http/2.
Wysyłanie ramek HTTP/2 PING: PROTOKÓŁ HTTP/2 ma mechanizm wysyłania ramek PING w celu zapewnienia, że bezczynne połączenie jest nadal funkcjonalne. Zapewnienie opłacalnego połączenia jest szczególnie przydatne podczas pracy ze strumieniami długotrwałymi, które są często bezczynne, ale tylko sporadycznie widzą działania, na przykład strumienie gRPC. Aplikacje mogą wysyłać okresowe ramki PING, Kestrel ustawiając limity dla elementu 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>(); });
Kontenery
Przed platformą .NET 5.0 kompilowanie i publikowanie pliku Dockerfile dla aplikacji ASP.NET Core wymaga ściągnięcia całego zestawu .NET Core SDK i obrazu platformy ASP.NET Core. W tej wersji ściąganie bajtów obrazów zestawu SDK jest zmniejszane, a bajty pobierane dla obrazu ASP.NET Core są w dużej mierze wyeliminowane. Aby uzyskać więcej informacji, zobacz ten komentarz dotyczący problemu w usłudze GitHub.
Uwierzytelnianie i autoryzacja
Microsoft Entra ID authentication with Microsoft.Identity. Sieć
Szablony projektów ASP.NET Core są teraz zintegrowane z usługą Microsoft.Identity.Web w celu obsługi uwierzytelniania za pomocą identyfikatora Entra firmy Microsoft. Microsoft .Identity. Pakiet internetowy zapewnia:
- Lepsze środowisko uwierzytelniania za pomocą identyfikatora Entra firmy Microsoft.
- Łatwiejszy sposób uzyskiwania dostępu do zasobów platformy Azure w imieniu użytkowników, w tym programu Microsoft Graph. Zobacz Microsoft .Identity. Przykład internetowy, który rozpoczyna się od podstawowego logowania i przechodzi przez wiele dzierżaw, przy użyciu interfejsów API platformy Azure, przy użyciu programu Microsoft Graph i ochrony własnych interfejsów API.
Microsoft.Identity.Web
jest dostępny wraz z platformą .NET 5.
Zezwalaj na anonimowy dostęp do punktu końcowego
AllowAnonymous
Metoda rozszerzenia umożliwia anonimowy dostęp do punktu końcowego:
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();
});
}
Niestandardowa obsługa błędów autoryzacji
Niestandardowa obsługa błędów autoryzacji jest teraz łatwiejsza w przypadku nowego interfejsu IAuthorizationMiddlewareResultHandler wywoływanego przez oprogramowanie pośredniczące autoryzacji. Domyślna implementacja pozostaje taka sama, ale niestandardowa procedura obsługi może być zarejestrowana w lokalizacji [Wstrzykiwanie zależności, co umożliwia niestandardowe odpowiedzi HTTP na podstawie przyczyny niepowodzenia autoryzacji. Zobacz ten przykład , który demonstruje użycie obiektu IAuthorizationMiddlewareResultHandler
.
Autoryzacja podczas korzystania z routingu punktu końcowego
Autoryzacja podczas korzystania z routingu punktu końcowego odbiera HttpContext
teraz wystąpienie punktu końcowego zamiast wystąpienia punktu końcowego. Dzięki temu oprogramowanie pośredniczące autoryzacji może uzyskać dostęp do RouteData
właściwości i innych elementów HttpContext
, które nie były dostępne, choć Endpoint klasa. Punkt końcowy można pobrać z kontekstu przy użyciu kontekstu. GetEndpoint.
Kontrola dostępu oparta na rolach przy użyciu uwierzytelniania Kerberos i protokołu LDAP w systemie Linux
Zobacz Uwierzytelnianie Kerberos i kontrola dostępu oparta na rolach (RBAC)
Ulepszenia interfejsu API
Metody rozszerzenia JSON dla obiektów HttpRequest i HttpResponse
Dane JSON można odczytywać i zapisywać na podstawie HttpRequest
metody i HttpResponse
przy użyciu nowych ReadFromJsonAsync metod rozszerzeń.WriteAsJsonAsync
Te metody rozszerzenia używają serializatora System.Text.Json do obsługi danych JSON. Nowa HasJsonContentType
metoda rozszerzenia może również sprawdzić, czy żądanie ma typ zawartości JSON.
Metody rozszerzenia JSON można połączyć z routingiem punktów końcowych w celu utworzenia interfejsów API JSON w stylu programowania, który wywołujemy jako trasę do kodu. Jest to nowa opcja dla deweloperów, którzy chcą tworzyć podstawowe interfejsy API JSON w uproszczony sposób. Na przykład aplikacja internetowa, która ma tylko kilka punktów końcowych, może użyć trasy do kodu, a nie pełnej funkcjonalności 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
Domyślny format dla System.Diagnostics.Activity teraz jest domyślnie formatem W3C. Dzięki temu obsługa śledzenia rozproszonego w ASP.NET Core jest domyślnie współdziałana z większą możliwą obsługą struktur.
FromBodyAttribute
FromBodyAttribute Teraz obsługuje konfigurowanie opcji, która umożliwia rozważenie tych parametrów lub właściwości jako opcjonalnych:
public IActionResult Post([FromBody(EmptyBodyBehavior = EmptyBodyBehavior.Allow)]
MyModel model)
{
...
}
Różne ulepszenia
Zaczęliśmy stosować adnotacje dopuszczające wartość null do zestawów ASP.NET Core. Planujemy dodać adnotację do większości typowych publicznych powierzchni interfejsów API platformy .NET 5.
Kontrolowanie aktywacji klasy uruchamiania
Dodano dodatkowe UseStartup przeciążenie, które umożliwia aplikacji zapewnienie metody fabrycznej do kontrolowania Startup
aktywacji klas. Kontrolowanie Startup
aktywacji klasy jest przydatne do przekazywania dodatkowych parametrów do Startup
, które są inicjowane wraz z hostem:
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();
}
}
Automatyczne odświeżanie za pomocą zegarka dotnet
Na platformie .NET 5 uruchomienie zegarka dotnet w projekcie ASP.NET Core powoduje uruchomienie domyślnej przeglądarki i automatyczne odświeżenie przeglądarki w miarę wprowadzania zmian w kodzie. Oznacza to, że można wykonywać następujące czynności:
- Otwórz projekt ASP.NET Core w edytorze tekstów.
- Uruchom program
dotnet watch
. - Skoncentruj się na zmianach kodu, gdy narzędzie obsługuje ponowne kompilowanie, ponowne uruchamianie i ponowne ładowanie aplikacji.
Program formatujący rejestratora konsoli
Wprowadzono ulepszenia dostawcy dzienników konsoli w bibliotece Microsoft.Extensions.Logging
. Deweloperzy mogą teraz zaimplementować niestandardowy ConsoleFormatter
element umożliwiający wykonywanie pełnej kontroli nad formatowaniem i kolorowaniem danych wyjściowych konsoli. Interfejsy API formatowania umożliwiają sformatowanie przez zaimplementowanie podzestawu sekwencji ucieczki VT-100. VT-100 jest obsługiwany przez większość nowoczesnych terminali. Rejestrator konsoli może analizować sekwencje ucieczki w nieobsługiwanych terminalach, dzięki czemu deweloperzy mogą tworzyć jeden formater dla wszystkich terminali.
Rejestrator konsoli JSON
Oprócz obsługi niestandardowych formatów dodaliśmy również wbudowany formater JSON, który emituje strukturalne dzienniki JSON do konsoli. Poniższy kod pokazuje, jak przełączyć się z domyślnego rejestratora do formatu 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>();
});
Komunikaty dziennika emitowane do konsoli są sformatowane w formacie 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}"
}
}