Co nowego w programie ASP.NET Core 3.0
W tym artykule przedstawiono najważniejsze zmiany w programie ASP.NET Core 3.0 z linkami do odpowiedniej dokumentacji.
Blazor
Blazor to nowa struktura w programie ASP.NET Core do tworzenia interaktywnego internetowego interfejsu użytkownika po stronie klienta za pomocą platformy .NET:
- Tworzenie zaawansowanych interaktywnych interfejsów użytkownika przy użyciu języka C#.
- Udostępnianie logiki aplikacji po stronie serwera i po stronie klienta napisanej na platformie .NET.
- Renderowanie interfejsu użytkownika jako kodu HTML i CSS w celu obsługi w szerokiej gamie przeglądarek, w tym przeglądarek mobilnych.
Blazor obsługiwane scenariusze platformy:
- Składniki interfejsu użytkownika wielokrotnego użytku (Razor składniki)
- Routing po stronie klienta
- Układy składników
- Obsługa wstrzykiwania zależności
- Formularze i walidacja
- Dostarczanie Razor składników w Razor bibliotekach klas
- Międzyoperacyjność w języku JavaScript
Aby uzyskać więcej informacji, zobacz ASP.NET Core Blazor.
Blazor Server
Blazor Rozdziela logikę renderowania składników z sposobu stosowania aktualizacji interfejsu użytkownika. Serwer Blazor Server zapewnia obsługę hostowania składników Razor na serwerze w aplikacji ASP.NET Core. Aktualizacje interfejsu użytkownika są obsługiwane za pośrednictwem połączenia SignalR. Blazor Server program jest obsługiwany w programie ASP.NET Core 3.0.
Blazor WebAssembly (Wersja zapoznawcza)
Blazor aplikacje można również uruchamiać bezpośrednio w przeglądarce przy użyciu środowiska uruchomieniowego platformy .NET opartego na zestawie WebAssembly. Blazor WebAssembly jest w wersji zapoznawczej i nie jest obsługiwany w programie ASP.NET Core 3.0. Blazor WebAssembly będzie obsługiwany w przyszłej wersji ASP.NET Core.
Składniki Razor
Blazor aplikacje są tworzone na podstawie składników. Składniki są fragmentami samodzielnego interfejsu użytkownika, takimi jak strona, okno dialogowe lub formularz. Składniki to normalne klasy platformy .NET, które definiują logikę renderowania interfejsu użytkownika i programy obsługi zdarzeń po stronie klienta. Możesz tworzyć zaawansowane interaktywne aplikacje internetowe bez języka JavaScript.
Składniki w programie Blazor są zwykle tworzone przy użyciu Razor składni, naturalnej mieszanki języków HTML i C#. Razor składniki są podobne do Razor widoków Pages i MVC, w których oba te składniki używają polecenia Razor. W przeciwieństwie do stron i widoków, które są oparte na modelu odpowiedzi na żądanie, składniki są używane specjalnie do obsługi kompozycji interfejsu użytkownika.
gRPC
gRPC:
Jest popularną platformą RPC o wysokiej wydajności (zdalne wywołanie procedury).
Oferuje przegrzane podejście oparte na umowie pierwszej do opracowywania interfejsów API.
Korzysta z nowoczesnych technologii, takich jak:
- Protokół HTTP/2 do transportu.
- protokołu jako język opisu interfejsu.
- Format serializacji binarnej.
Udostępnia funkcje, takie jak:
- Uwierzytelnianie
- Dwukierunkowa kontrola przesyłania strumieniowego i przepływu.
- Anulowanie i przekroczenia limitu czasu.
Funkcje gRPC w systemie ASP.NET Core 3.0 obejmują:
- Grpc.AspNetCore: platforma ASP.NET Core do hostowania usług gRPC. gRPC w systemie ASP.NET Core integruje się ze standardowymi funkcjami ASP.NET Core, takimi jak rejestrowanie, wstrzykiwanie zależności (DI), uwierzytelnianie i autoryzacja.
- Grpc.Net.Client: klient gRPC dla platformy .NET Core, który opiera się na znanej
HttpClient
wersji . - Grpc.Net.ClientFactory: integracja klienta gRPC z programem
HttpClientFactory
.
Aby uzyskać więcej informacji, zobacz Omówienie usługi gRPC na platformie .NET.
SignalR
Aby uzyskać instrukcje dotyczące migracji, zobacz Aktualizowanie SignalR kodu . SignalR teraz używa System.Text.Json
metody do serializacji/deserializowania komunikatów JSON. Aby uzyskać instrukcje dotyczące przywracania serializatora opartego na platformie Newtonsoft.Json, zobacz Switch to Newtonsoft.Json (Przełączanie do pliku Newtonsoft.Json
Newtonsoft.Json).
W programach JavaScript i .NET Clients for SignalRdodano obsługę automatycznego ponownego łączenia. Domyślnie klient próbuje natychmiast ponownie nawiązać połączenie i ponowić próbę po 2, 10 i 30 sekundach, jeśli to konieczne. Jeśli klient zostanie pomyślnie ponownie połączony, otrzyma nowy identyfikator połączenia. Automatyczne ponowne nawiązywanie połączenia jest opt-in:
const connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.withAutomaticReconnect()
.build();
Interwały ponownego łączenia można określić, przekazując tablicę czasu trwania na podstawie milisekund:
.withAutomaticReconnect([0, 3000, 5000, 10000, 15000, 30000])
//.withAutomaticReconnect([0, 2000, 10000, 30000]) The default intervals.
Implementację niestandardową można przekazać w celu pełnej kontroli interwałów ponownego łączenia.
Jeśli ponowne nawiązywanie połączenia zakończy się niepowodzeniem po ostatnim interwale ponownego połączenia:
- Klient uważa, że połączenie jest w trybie offline.
- Klient przestaje próbować ponownie nawiązać połączenie.
Podczas ponownych prób nawiązania połączenia zaktualizuj interfejs użytkownika aplikacji, aby powiadomić użytkownika o próbie ponownego nawiązania połączenia.
Aby przekazać opinię interfejsu użytkownika po przerwaniu połączenia, SignalR interfejs API klienta został rozszerzony w celu uwzględnienia następujących procedur obsługi zdarzeń:
onreconnecting
: daje deweloperom możliwość wyłączenia interfejsu użytkownika lub powiadom użytkowników, że aplikacja jest w trybie offline.onreconnected
: daje deweloperom możliwość zaktualizowania interfejsu użytkownika po ponownym utworzeniu połączenia.
Poniższy kod służy onreconnecting
do aktualizowania interfejsu użytkownika podczas próby nawiązania połączenia:
connection.onreconnecting((error) => {
const status = `Connection lost due to error "${error}". Reconnecting.`;
document.getElementById("messageInput").disabled = true;
document.getElementById("sendButton").disabled = true;
document.getElementById("connectionStatus").innerText = status;
});
Poniższy kod używa onreconnected
metody w celu zaktualizowania interfejsu użytkownika w połączeniu:
connection.onreconnected((connectionId) => {
const status = `Connection reestablished. Connected.`;
document.getElementById("messageInput").disabled = false;
document.getElementById("sendButton").disabled = false;
document.getElementById("connectionStatus").innerText = status;
});
SignalR 3.0 i nowsze udostępnia niestandardowy zasób do obsługi autoryzacji, gdy metoda centrum wymaga autoryzacji. Zasób jest wystąpieniem HubInvocationContext
klasy . Element HubInvocationContext
zawiera następujące elementy:
HubCallerContext
- Nazwa wywoływanej metody centrum.
- Argumenty metody piasty.
Rozważmy poniższy przykład aplikacji pokoju rozmów zezwalającej na logowanie wielu organizacji za pośrednictwem usługi Azure Active Directory. Każda osoba mająca konto Microsoft może zalogować się do czatu, ale tylko członkowie organizacji należącej do organizacji mogą blokować użytkownikom lub wyświetlać historie czatów użytkowników. Aplikacja może ograniczyć niektóre funkcje od określonych użytkowników.
public class DomainRestrictedRequirement :
AuthorizationHandler<DomainRestrictedRequirement, HubInvocationContext>,
IAuthorizationRequirement
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
DomainRestrictedRequirement requirement,
HubInvocationContext resource)
{
if (context.User?.Identity?.Name == null)
{
return Task.CompletedTask;
}
if (IsUserAllowedToDoThis(resource.HubMethodName, context.User.Identity.Name))
{
context.Succeed(requirement);
}
return Task.CompletedTask;
}
private bool IsUserAllowedToDoThis(string hubMethodName, string currentUsername)
{
if (hubMethodName.Equals("banUser", StringComparison.OrdinalIgnoreCase))
{
return currentUsername.Equals("bob42@jabbr.net", StringComparison.OrdinalIgnoreCase);
}
return currentUsername.EndsWith("@jabbr.net", StringComparison.OrdinalIgnoreCase));
}
}
W poprzednim kodzie DomainRestrictedRequirement
służy jako niestandardowy IAuthorizationRequirement
element . HubInvocationContext
Ponieważ parametr zasobu jest przekazywany, logika wewnętrzna może:
- Sprawdź kontekst, w którym jest wywoływany koncentrator.
- Podejmij decyzje dotyczące zezwalania użytkownikowi na wykonywanie poszczególnych metod centrum.
Poszczególne metody centrum można oznaczyć nazwą zasad sprawdzanych w czasie wykonywania. Gdy klienci próbują wywołać poszczególne metody centrum, DomainRestrictedRequirement
program obsługi uruchamia i kontroluje dostęp do metod. Na podstawie sposobu DomainRestrictedRequirement
kontroli dostępu:
- Wszyscy zalogowani użytkownicy mogą wywołać metodę
SendMessage
. - Tylko użytkownicy, którzy zalogowali się
@jabbr.net
przy użyciu adresu e-mail, mogą wyświetlać historie użytkowników. - Tylko
bob42@jabbr.net
użytkownicy mogą blokować dostęp do pokoju rozmów.
[Authorize]
public class ChatHub : Hub
{
public void SendMessage(string message)
{
}
[Authorize("DomainRestricted")]
public void BanUser(string username)
{
}
[Authorize("DomainRestricted")]
public void ViewUserHistory(string username)
{
}
}
DomainRestricted
Tworzenie zasad może obejmować:
- W
Startup.cs
pliku dodaj nowe zasady. - Podaj wymaganie niestandardowe
DomainRestrictedRequirement
jako parametr. - Rejestrowanie przy użyciu oprogramowania pośredniczącego
DomainRestricted
autoryzacji.
services
.AddAuthorization(options =>
{
options.AddPolicy("DomainRestricted", policy =>
{
policy.Requirements.Add(new DomainRestrictedRequirement());
});
});
SignalR koncentratory używają routingu punktu końcowego. SignalR Połączenie koncentratora zostało wcześniej wykonane jawnie:
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("hubs/chat");
});
W poprzedniej wersji deweloperzy musieli połączyć kontrolery, Razor strony i koncentratory w różnych miejscach. Jawne połączenie powoduje serię niemal identycznych segmentów routingu:
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("hubs/chat");
});
app.UseRouting(routes =>
{
routes.MapRazorPages();
});
SignalR Koncentratory 3.0 można kierować za pośrednictwem routingu punktów końcowych. W przypadku routingu punktów końcowych zazwyczaj można skonfigurować cały routing w programie UseRouting
:
app.UseRouting(routes =>
{
routes.MapRazorPages();
routes.MapHub<ChatHub>("hubs/chat");
});
Dodano ASP.NET Core 3.0 SignalR :
Przesyłanie strumieniowe klient-serwer. W przypadku przesyłania strumieniowego typu klient-serwer metody po stronie serwera mogą przyjmować wystąpienia IAsyncEnumerable<T>
typu lub ChannelReader<T>
. W poniższym przykładzie UploadStream
języka C# metoda w centrum otrzyma strumień ciągów od klienta:
public async Task UploadStream(IAsyncEnumerable<string> stream)
{
await foreach (var item in stream)
{
// process content
}
}
Aplikacje klienckie platformy .NET mogą przekazywać IAsyncEnumerable<T>
wystąpienie typu lub ChannelReader<T>
jako stream
argument UploadStream
metody Hub powyżej.
Po zakończeniu pętli i zakończeniu for
funkcji lokalnej jest wysyłane uzupełnianie strumienia:
async IAsyncEnumerable<string> clientStreamData()
{
for (var i = 0; i < 5; i++)
{
var data = await FetchSomeData();
yield return data;
}
}
await connection.SendAsync("UploadStream", clientStreamData());
Aplikacje klienckie języka JavaScript używają SignalRSubject
elementu (lub tematu RxJS) dla stream
argumentu UploadStream
metody Hub powyżej.
let subject = new signalR.Subject();
await connection.send("StartStream", "MyAsciiArtStream", subject);
Kod JavaScript może użyć subject.next
metody do obsługi ciągów, ponieważ są przechwytywane i gotowe do wysłania na serwer.
subject.next("example");
subject.complete();
Korzystając z kodu takiego jak dwa poprzednie fragmenty kodu, można utworzyć środowiska przesyłania strumieniowego w czasie rzeczywistym.
Nowa serializacja JSON
program ASP.NET Core 3.0 domyślnie używa System.Text.Json serializacji JSON:
- Odczytuje i zapisuje asynchronicznie kod JSON.
- Jest zoptymalizowany pod kątem tekstu UTF-8.
- Zazwyczaj wyższa wydajność niż
Newtonsoft.Json
.
Aby dodać Json.NET do ASP.NET Core 3.0, zobacz Dodawanie obsługi formatu JSON opartego na pliku Newtonsoft.Json.
Nowe Razor dyrektywy
Poniższa lista zawiera nowe Razor dyrektywy:
@attribute
@attribute
: Dyrektywa stosuje dany atrybut do klasy wygenerowanej strony lub widoku. Na przykład@attribute [Authorize]
.@implements
@implements
: Dyrektywa implementuje interfejs dla wygenerowanej klasy. Na przykład@implements IDisposable
.
Usługa IdentityServer4 obsługuje uwierzytelnianie i autoryzację dla internetowych interfejsów API i spA
ASP.NET Core 3.0 oferuje uwierzytelnianie w aplikacjach jednostronicowych (SPA) przy użyciu obsługi autoryzacji internetowego interfejsu API. ASP.NET Core Identity na potrzeby uwierzytelniania i przechowywania użytkowników jest połączony z maszyną IdentityServer4 na potrzeby implementowania programu OpenID Connect.
IdentityServer4 to platforma OpenID Connect i OAuth 2.0 dla platformy ASP.NET Core 3.0. Umożliwia ona następujące funkcje zabezpieczeń:
- Uwierzytelnianie jako usługa (AaaS)
- Logowanie jednokrotne/wyłączanie logowania jednokrotnego w wielu typach aplikacji
- Kontrola dostępu dla interfejsów API
- Brama federacyjna
Aby uzyskać więcej informacji, zobacz dokumentację IdentityServer4 lub uwierzytelnianie i autoryzację dla spAs.
Uwierzytelnianie certyfikatu i protokołu Kerberos
Uwierzytelnianie certyfikatu wymaga:
- Konfigurowanie serwera do akceptowania certyfikatów.
- Dodanie oprogramowania pośredniczącego uwierzytelniania w programie
Startup.Configure
. - Dodawanie usługi uwierzytelniania certyfikatów w programie
Startup.ConfigureServices
.
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(
CertificateAuthenticationDefaults.AuthenticationScheme)
.AddCertificate();
// Other service configuration removed.
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseAuthentication();
// Other app configuration removed.
}
Opcje uwierzytelniania certyfikatu obejmują następujące możliwości:
- Zaakceptuj certyfikaty z podpisem własnym.
- Sprawdź, czy nie ma odwołania certyfikatów.
- Sprawdź, czy certyfikat proffered ma w nim odpowiednie flagi użycia.
Domyślna jednostka użytkownika jest tworzona z właściwości certyfikatu. Podmiot zabezpieczeń użytkownika zawiera zdarzenie, które umożliwia uzupełnienie lub zastąpienie podmiotu zabezpieczeń. Aby uzyskać więcej informacji, zobacz Konfigurowanie uwierzytelniania certyfikatów w programie ASP.NET Core.
Uwierzytelnianie systemu Windows zostało rozszerzone na systemy Linux i macOS. W poprzednich wersjach uwierzytelnianie systemu Windows było ograniczone do usług IIS i HTTP.sys. W systemie ASP.NET Core 3.0 Kestrel można używać hostów przyłączonych do domeny systemu Windows, Kerberos i NTLM w systemach Windows, Linux i macOS. Kestrel obsługa tych schematów uwierzytelniania jest zapewniana przez pakiet NuGet Microsoft.AspNetCore.Authentication.Negotiate. Podobnie jak w przypadku innych usług uwierzytelniania, skonfiguruj szeroką aplikację uwierzytelniania, a następnie skonfiguruj usługę:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate();
// Other service configuration removed.
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseAuthentication();
// Other app configuration removed.
}
Wymagania dotyczące hosta:
- Hosty systemu Windows muszą mieć nazwy główne usługi (SPN) dodane do konta użytkownika hostowania aplikacji.
- Maszyny z systemami Linux i macOS muszą być przyłączone do domeny.
- Nazwy SPN należy utworzyć dla procesu internetowego.
- Pliki keytab muszą być generowane i konfigurowane na maszynie hosta.
Aby uzyskać więcej informacji, zobacz Konfigurowanie uwierzytelniania systemu Windows w ASP.NET Core.
Zmiany szablonu
Szablony interfejsu użytkownika sieci Web (Razor Strony, MVC z kontrolerem i widokami) zostały usunięte:
- Interfejs cookie użytkownika zgody nie jest już uwzględniany. Aby włączyć funkcję wyrażania cookie zgody w aplikacji wygenerowanej przez szablony ASP.NET Core 3.0, zobacz Ogólne wsparcie dla rozporządzenia o ochronie danych (RODO) w ASP.NET Core.
- Skrypty i powiązane zasoby statyczne są teraz przywołyne jako pliki lokalne zamiast używać sieci CDN. Aby uzyskać więcej informacji, zobacz Skrypty i powiązane zasoby statyczne są teraz przywołyne jako pliki lokalne zamiast używać sieci CDN na podstawie bieżącego środowiska (dotnet/AspNetCore.Docs #14350).
Szablon Angular został zaktualizowany do używania platformy Angular 8.
Szablon Razor biblioteki klas (RCL) domyślnie domyślnie służy do Razor tworzenia składników. Nowa opcja szablonu w programie Visual Studio zapewnia obsługę szablonów dla stron i widoków. Podczas tworzenia listy RCL na podstawie szablonu w powłoce poleceń przekaż --support-pages-and-views
opcję (dotnet new razorclasslib --support-pages-and-views
).
Host ogólny
Szablony ASP.NET Core 3.0 używają hosta ogólnego platformy .NET w programie ASP.NET Core. Poprzednie wersje używały elementu WebHostBuilder. Użycie hosta ogólnego platformy .NET Core (HostBuilder) zapewnia lepszą integrację aplikacji ASP.NET Core z innymi scenariuszami serwera, które nie są specyficzne dla sieci Web. Aby uzyskać więcej informacji, zobacz HostBuilder zastępuje WebHostBuilder.
Konfiguracja hosta
Przed wydaniem ASP.NET Core 3.0 zmienne środowiskowe poprzedzone prefiksem ASPNETCORE_
zostały załadowane do konfiguracji hosta hosta sieci Web. W wersji 3.0 AddEnvironmentVariables
jest używany do ładowania zmiennych środowiskowych poprzedzonych prefiksem DOTNET_
dla konfiguracji hosta za pomocą polecenia CreateDefaultBuilder
.
Zmiany w iniekcji konstruktora startowego
Host ogólny obsługuje tylko następujące typy iniekcji Startup
konstruktora:
- IHostEnvironment
IWebHostEnvironment
- IConfiguration
Wszystkie usługi można nadal wstrzykiwać bezpośrednio jako argumenty do Startup.Configure
metody . Aby uzyskać więcej informacji, zobacz Generic Host restricts Startup constructor injection (aspnet/Anonss #353).
Kestrel
- Kestrel konfiguracja została zaktualizowana do migracji do hosta ogólnego. W wersji 3.0 Kestrel program jest skonfigurowany w konstruktorze hostów sieci Web udostępnianym przez
ConfigureWebHostDefaults
program . - Karty połączeń zostały usunięte i Kestrel zastąpione oprogramowaniem pośredniczącym połączeń, które jest podobne do oprogramowania pośredniczącego HTTP w potoku ASP.NET Core, ale w przypadku połączeń niższego poziomu.
- Warstwa Kestrel transportu została udostępniona jako interfejs publiczny w programie
Connections.Abstractions
. - Niejednoznaczność między nagłówkami a przyczepami została rozwiązana przez przeniesienie nagłówków końcowych do nowej kolekcji.
- Synchroniczne interfejsy API we/wy, takie jak
HttpRequest.Body.Read
, są typowym źródłem głodu wątku, co prowadzi do awarii aplikacji. W wersji 3.0AllowSynchronousIO
jest domyślnie wyłączona.
Aby uzyskać więcej informacji, zobacz Migrowanie z ASP.NET Core 2.2 do 3.0.
Protokół HTTP/2 jest domyślnie włączony
Protokół HTTP/2 jest domyślnie włączony dla Kestrel punktów końcowych HTTPS. Obsługa protokołu HTTP/2 dla usług IIS lub HTTP.sys jest włączona, gdy jest obsługiwana przez system operacyjny.
EventCounters na żądanie
Hosting EventSource, Microsoft.AspNetCore.Hosting
, emituje następujące nowe EventCounter typy związane z żądaniami przychodzącymi:
requests-per-second
total-requests
current-requests
failed-requests
Routing punktów końcowych
Routing punktów końcowych, który umożliwia platformom (na przykład MVC) pracę z oprogramowaniem pośredniczącym, jest ulepszony:
- Kolejność oprogramowania pośredniczącego i punktów końcowych można skonfigurować w potoku przetwarzania żądań programu
Startup.Configure
. - Punkty końcowe i oprogramowanie pośredniczące dobrze składają się z innych technologii opartych na ASP.NET Core, takich jak kontrole kondycji.
- Punkty końcowe mogą implementować zasady, takie jak CORS lub autoryzacja, zarówno w oprogramowanie pośredniczące, jak i MVC.
- Filtry i atrybuty można umieszczać na metodach w kontrolerach.
Aby uzyskać więcej informacji, zobacz Routing na platformie ASP.NET Core.
Kontrole kondycji
Testy kondycji używają routingu punktu końcowego z hostem ogólnym. W Startup.Configure
pliku wywołaj MapHealthChecks
konstruktora punktu końcowego przy użyciu adresu URL punktu końcowego lub ścieżki względnej:
app.UseEndpoints(endpoints =>
{
endpoints.MapHealthChecks("/health");
});
Punkty końcowe kontroli kondycji mogą:
- Określ co najmniej jeden dozwolony host/porty.
- Wymagaj autoryzacji.
- Wymagaj mechanizmu CORS.
Aby uzyskać więcej informacji, zobacz następujące artykuły:
Potoki w obiekcie HttpContext
Teraz można odczytać treść żądania i napisać treść odpowiedzi przy użyciu interfejsu System.IO.Pipelines API. Właściwość HttpRequest.BodyReader
udostępnia element PipeReader , który może służyć do odczytywania treści żądania. Właściwość HttpResponse.BodyWriter
udostępnia element PipeWriter , który może służyć do zapisywania treści odpowiedzi. HttpRequest.BodyReader
jest analogią strumienia HttpRequest.Body
. HttpResponse.BodyWriter
jest analogią strumienia HttpResponse.Body
.
Ulepszone raportowanie błędów w usługach IIS
Błędy uruchamiania podczas hostowania aplikacji ASP.NET Core w usługach IIS generują teraz bogatsze dane diagnostyczne. Te błędy są zgłaszane do dziennika zdarzeń systemu Windows ze śladami stosu wszędzie tam, gdzie ma to zastosowanie. Ponadto wszystkie ostrzeżenia, błędy i nieobsługiwane wyjątki są rejestrowane w dzienniku zdarzeń systemu Windows.
Zestaw SDK usługi procesu roboczego i procesu roboczego
Program .NET Core 3.0 wprowadza nowy szablon aplikacji usługi Worker Service. Ten szablon stanowi punkt wyjścia do pisania długotrwałych usług na platformie .NET Core.
Aby uzyskać więcej informacji, zobacz:
- Procesy robocze platformy .NET Core jako usługi systemu Windows
- Zadania w tle z hostowanymi usługami w ASP.NET Core
- Host ASP.NET Core w usłudze systemu Windows
Ulepszenia oprogramowania pośredniczącego nagłówków przekazywanych
W poprzednich wersjach ASP.NET Core wywoływanie i UseHsts UseHttpsRedirection było problematyczne podczas wdrażania w systemie Azure Linux lub za dowolnym zwrotnym serwerem proxy innym niż usługi IIS. Poprawka dla poprzednich wersji jest udokumentowana w temacie Przekazywanie schematu dla systemu Linux i odwrotnych serwerów proxy innych niż IIS.
Ten scenariusz został naprawiony w ASP.NET Core 3.0. Host włącza oprogramowanie pośredniczące nagłówków przekazywanych, gdy zmienna ASPNETCORE_FORWARDEDHEADERS_ENABLED
środowiskowa jest ustawiona na true
wartość . ASPNETCORE_FORWARDEDHEADERS_ENABLED
parametr jest ustawiony na true
wartość w naszych obrazach kontenerów.
usprawnienia dotyczące wydajności
ASP.NET Core 3.0 zawiera wiele ulepszeń, które zmniejszają użycie pamięci i zwiększają przepływność:
- Zmniejszenie użycia pamięci podczas korzystania z wbudowanego kontenera iniekcji zależności dla usług o określonym zakresie.
- Zmniejszenie alokacji w całej strukturze, w tym scenariusze oprogramowania pośredniczącego i routing.
- Zmniejszenie użycia pamięci dla połączeń protokołu WebSocket.
- Ulepszenia redukcji pamięci i przepływności dla połączeń HTTPS.
- Nowy zoptymalizowany i w pełni asynchroniczny serializator JSON.
- Zmniejszenie użycia pamięci i ulepszenia przepływności podczas analizowania formularzy.
program ASP.NET Core 3.0 działa tylko na platformie .NET Core 3.0
Od wersji ASP.NET Core 3.0 platforma .NET Framework nie jest już obsługiwaną strukturą docelową. Projekty przeznaczone dla platformy .NET Framework mogą być nadal w pełni obsługiwane przy użyciu wersji LTS platformy .NET Core 2.1. Większość pakietów powiązanych z platformą ASP.NET Core 2.1.x będzie obsługiwana przez czas nieokreślony, poza trzyletnim okresem LTS dla platformy .NET Core 2.1.
Aby uzyskać informacje o migracji, zobacz Przenoszenie kodu z programu .NET Framework do platformy .NET Core.
Korzystanie z platformy udostępnionej ASP.NET Core
Udostępniona platforma ASP.NET Core 3.0 zawarta w metapakiecie Microsoft.AspNetCore.App nie wymaga już jawnego <PackageReference />
elementu w pliku projektu. Współużytkowana struktura jest automatycznie przywołyowana podczas korzystania z Microsoft.NET.Sdk.Web
zestawu SDK w pliku projektu:
<Project Sdk="Microsoft.NET.Sdk.Web">
Zestawy usunięte z udostępnionej platformy ASP.NET Core
Najbardziej godne uwagi zestawy usunięte z platformy udostępnionej ASP.NET Core 3.0 to:
- Newtonsoft.Json (Json.NET). Aby dodać Json.NET do ASP.NET Core 3.0, zobacz Dodawanie obsługi formatu JSON opartego na pliku Newtonsoft.Json. ASP.NET Core 3.0 wprowadza
System.Text.Json
do odczytywania i pisania kodu JSON. Aby uzyskać więcej informacji, zobacz Nowa serializacji JSON w tym dokumencie. - Entity Framework Core
Aby uzyskać pełną listę zestawów usuniętych ze struktury udostępnionej, zobacz Zestawy usuwane z Microsoft.AspNetCore.App 3.0. Aby uzyskać więcej informacji na temat motywacji tej zmiany, zobacz Istotne zmiany w Microsoft.AspNetCore.App w wersji 3.0 i A first look at changes coming in ASP.NET Core 3.0 (Zmiany powodujące niezgodność w wersji 3.0) i A first look at changes coming in ASP.NET Core 3.0 (Zmiany powodujące niezgodność w wersji 3.0).