Ereignisse
Power BI DataViz Weltmeisterschaften
14. Feb., 16 Uhr - 31. März, 16 Uhr
Mit 4 Chancen, ein Konferenzpaket zu gewinnen und es zum LIVE Grand Finale in Las Vegas zu machen
Weitere InformationenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
In diesem Artikel werden die wichtigsten Änderungen in ASP.NET Core 3.0 aufgezeigt und Links zur relevanten Dokumentation bereitgestellt.
Blazor ist ein Framework in ASP.NET Core zum Erstellen von interaktiven clientseitigen Webbenutzeroberflächen mit .NET:
Vom Blazor-Framework unterstützte Szenarien:
Weitere Informationen finden Sie unter ASP.NET Core Blazor.
Blazor entkoppelt die Komponentenrenderinglogik von Aktualisierungen der Benutzeroberfläche. Blazor Server bietet Unterstützung zum Hosten von Razor-Komponenten in einer ASP.NET Core-App auf dem Server. Aktualisierungen der Benutzeroberfläche werden über eine SignalR-Verbindung verarbeitet. Blazor Server wird in ASP.NET Core 3.0 unterstützt.
Blazor-Apps können auch mit einer WebAssembly-basierten .NET-Runtime direkt im Browser ausgeführt werden. Blazor WebAssembly befindet sich in der Vorschau und wird in ASP.NET Core 3.0 nicht unterstützt. Blazor WebAssembly wird in einem zukünftigen Release von ASP.NET Core unterstützt.
Blazor-Apps setzen sich aus Komponenten zusammen. Komponenten sind eigenständige Elemente einer Benutzeroberfläche, z. B. eine Seite, ein Dialogfeld oder ein Formular. Komponenten sind normale .NET-Klassen, die die Renderinglogik für die Benutzeroberfläche sowie clientseitige Ereignishandler definieren. Damit können Sie umfangreiche interaktive Web-Apps ohne JavaScript erstellen.
Komponenten in Blazor werden üblicherweise mit der Razor-Syntax erstellt, einer natürlichen Mischung aus HTML und C#. Razor-Komponenten ähneln Razor Pages und MVC-Ansichten dahingehend, dass sie ebenfalls Razor verwenden. Im Gegensatz zu Pages und Ansichten, die auf einem Anforderung/Antwort-Modell basieren, werden Komponenten speziell für die Verarbeitung der Benutzeroberflächengestaltung verwendet.
gRPC:
Ein beliebtes, hochleistungsfähiges RPC-Framework (Remote Procedure Call, Remoteprozeduraufruf).
Bietet einen strikten Contract First-Ansatz für die API-Entwicklung.
Verwendet moderne Technologien wie z. B.:
Bietet beispielsweise folgende Features:
Die gRPC-Funktionalität in ASP.NET Core 3.0 umfasst Folgendes:
HttpClient
aufbaut.HttpClientFactory
.Weitere Informationen finden Sie unter Übersicht zu gRPC in .NET.
Anweisungen zur Migration finden Sie unter Aktualisieren von SignalR-Code. SignalR verwendet jetzt System.Text.Json
, um JSON-Nachrichten zu serialisieren bzw. zu deserialisieren. Anleitungen zum Wiederherstellen des Newtonsoft.Json
-basierten Serialisierungsmoduls finden Sie unter Switch to Newtonsoft.Json (Wechseln zu Newtonsoft.Json).
In den JavaScript- und .NET-Clients für SignalR wurde Unterstützung für eine automatische erneute Verbindungsherstellung hinzugefügt. Standardmäßig versucht der Client sofort, die Verbindung wiederherzustellen, und wiederholt den Versuch nötigenfalls nach 2, 10 und 30 Sekunden. Wenn der Client die Verbindung erfolgreich wiederherstellt, erhält er eine neue Verbindungs-ID. Die automatische erneute Herstellung einer Verbindung kann optional aktiviert werden:
const connection = new signalR.HubConnectionBuilder()
.withUrl("/chathub")
.withAutomaticReconnect()
.build();
Die Intervalle für die Wiederherstellung einer Verbindung können durch Übergabe eines Arrays aus millisekundenbasierten Zeitspannen angegeben werden:
.withAutomaticReconnect([0, 3000, 5000, 10000, 15000, 30000])
//.withAutomaticReconnect([0, 2000, 10000, 30000]) The default intervals.
Zur vollständigen Steuerung der Wiederherstellungsintervalle kann eine benutzerdefinierte Implementierung übergeben werden.
Wenn die Verbindung nicht wiederhergestellt werden kann, passiert nach dem letzten Intervall Folgendes:
Aktualisieren Sie die App-Benutzeroberfläche während der Verbindungsversuche, um den Benutzer darüber zu informieren, dass versucht wird, erneut eine Verbindung herzustellen.
Um bei einer unterbrochenen Verbindung Feedback auf der Benutzeroberfläche bereitstellen zu können, wurde die SignalR-Client-API um die folgenden Ereignishandler ergänzt:
onreconnecting
: Bietet Entwicklern die Möglichkeit, die Benutzeroberfläche zu deaktivieren oder Benutzer darüber zu informieren, dass die App offline ist.onreconnected
: Bietet Entwicklern die Möglichkeit, die Benutzeroberfläche zu aktualisieren, sobald die Verbindung wiederhergestellt wurde.Der folgende Code verwendet onreconnecting
, um die Benutzeroberfläche während der Verbindungsversuche zu aktualisieren:
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;
});
Der folgende Code verwendet onreconnected
, um die Benutzeroberfläche nach erfolgreich hergestellter Verbindung zu aktualisieren:
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 und höher bietet eine benutzerdefinierte Ressource für Autorisierungshandler, wenn eine Hubmethode eine Autorisierung erfordert. Die Ressource ist eine Instanz von HubInvocationContext
. Der HubInvocationContext
umfasst Folgendes:
HubCallerContext
Sehen Sie sich das folgende Beispiel einer Chatroom-App an, die mehreren Mitgliedern einer Organisation die Anmeldung über Azure Active Directory ermöglicht. Jede Person mit einem Microsoft-Konto kann sich beim Chat anmelden, aber nur Mitglieder der besitzenden Organisation können Benutzer sperren oder den Chatverlauf anderer Benutzer anzeigen. Die App könnte bestimmte Funktionen für bestimmte Benutzer einschränken.
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));
}
}
Im vorherigen Code dient DomainRestrictedRequirement
als benutzerdefinierte IAuthorizationRequirement
. Da der Ressourcenparameter HubInvocationContext
übergeben wird, kann die interne Logik folgende Aktionen ausführen:
Einzelne Hubmethoden können mit dem Namen der Richtlinie gekennzeichnet werden, die der Code zur Laufzeit prüft. Wenn Clients versuchen, einzelne Hubmethoden aufzurufen, wird der DomainRestrictedRequirement
-Handler ausgeführt und steuert den Zugriff auf die Methoden. Basierend auf der Art und Weise, in der DomainRestrictedRequirement
den Zugriff steuert, kann Folgendes passieren:
SendMessage
-Methode aufrufen.@jabbr.net
-E-Mail-Adresse angemeldet haben, können den Verlauf anderer Benutzer anzeigen.bob42@jabbr.net
kann Benutzer aus dem Chatroom ausschließen.[Authorize]
public class ChatHub : Hub
{
public void SendMessage(string message)
{
}
[Authorize("DomainRestricted")]
public void BanUser(string username)
{
}
[Authorize("DomainRestricted")]
public void ViewUserHistory(string username)
{
}
}
Die Erstellung der DomainRestricted
-Richtlinie kann Folgendes umfassen:
Startup.cs
hinzu.DomainRestrictedRequirement
als Parameter bereit.DomainRestricted
bei der Autorisierungsmiddleware.services
.AddAuthorization(options =>
{
options.AddPolicy("DomainRestricted", policy =>
{
policy.Requirements.Add(new DomainRestrictedRequirement());
});
});
SignalR-Hubs verwenden Endpunktrouting. Eine SignalR-Hubverbindung wurde zuvor explizit eingerichtet:
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("hubs/chat");
});
In der vorherigen Version mussten Entwickler Controller, Razor-Seiten und Hubs an verschiedenen Orten miteinander verknüpfen. Explizite Verbindungen führen zu einer Reihe nahezu identischer Routingsegmente:
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("hubs/chat");
});
app.UseRouting(routes =>
{
routes.MapRazorPages();
});
SignalR 3.0-Hubs können per Endpunktrouting weitergeleitet werden. Beim Endpunktrouting kann in der Regel das gesamte Routing in UseRouting
konfiguriert werden:
app.UseRouting(routes =>
{
routes.MapRazorPages();
routes.MapHub<ChatHub>("hubs/chat");
});
In ASP.NET Core 3.0 SignalR wurde Folgendes hinzugefügt:
Streaming vom Client zum Server. Mit dem Streaming vom Client zum Server können serverseitige Methoden Instanzen von IAsyncEnumerable<T>
oder ChannelReader<T>
akzeptieren. Im folgenden C#-Beispiel empfängt die UploadStream
-Methode im Hub einen Zeichenfolgenstream vom Client:
public async Task UploadStream(IAsyncEnumerable<string> stream)
{
await foreach (var item in stream)
{
// process content
}
}
.NET-Client-Apps können entweder eine IAsyncEnumerable<T>
-oder eine ChannelReader<T>
-Instanz als stream
-Argument der oben genannten UploadStream
-Hubmethode übergeben.
Nachdem die for
-Schleife abgeschlossen ist und die lokale Funktion existiert, wird der Streamabschluss gesendet:
async IAsyncEnumerable<string> clientStreamData()
{
for (var i = 0; i < 5; i++)
{
var data = await FetchSomeData();
yield return data;
}
}
await connection.SendAsync("UploadStream", clientStreamData());
JavaScript-Client-Apps verwenden das SignalR-Subject
(oder ein RxJS-Subject) für das stream
-Argument der oben genannten UploadStream
-Hubmethode.
let subject = new signalR.Subject();
await connection.send("StartStream", "MyAsciiArtStream", subject);
Der JavaScript-Code könnte die subject.next
-Methode verwenden, um Zeichenfolgen zu verarbeiten, sobald diese erfasst werden und zum Senden an den Server bereit sin.
subject.next("example");
subject.complete();
Mit Code wie in den beiden obigen Codeausschnitten lassen sich Echtzeitstreamingfunktionen erzeugen.
ASP.NET Core 3.0 verwendet jetzt standardmäßig System.Text.Json zur JSON-Serialisierung:
Newtonsoft.Json
erzielen.Informationen zum Hinzufügen von Json.NET zu ASP.NET Core 3.0 finden Sie unter Hinzufügen von Newtonsoft.Json-basierter Unterstützung für das JSON-Format.
Die folgende Liste enthält neue Razor-Anweisungen:
@attribute
: die Anweisung @attribute
wendet das angegebene Attribut auf die Klasse der generierten Seite oder Ansicht an. Beispiel: @attribute [Authorize]
.@implements
: Die @implements
-Anweisung implementiert eine Schnittstelle für die generierte Klasse. Beispiel: @implements IDisposable
.ASP.NET Core 3.0 bietet eine Authentifizierung in Single-Page-Webanwendungen (SPAs) unter Verwendung der Unterstützung für die Web-API-Autorisierung. ASP.NET Core Identity zur Authentifizierung und Speicherung von Benutzenden wird mit IdentityServer4 zur Implementierung von OpenID Connect kombiniert.
IdentityServer4 ist ein OpenID Connect- und OAuth 2.0-Framework für ASP.NET Core 3.0. Es ermöglicht die folgenden Sicherheitsfunktionen:
Weitere Informationen finden Sie unter der IdentityServer4-Dokumentation oder Authentifizierung und Autorisierung für SPAs.
Die Zertifikatsauthentifizierung erfordert Folgendes:
Startup.Configure
hinzugefügt werden.Startup.ConfigureServices
hinzugefügt werden.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.
}
Die Optionen für die Zertifikatauthentifizierung umfassen folgende Möglichkeiten:
Aus den Zertifikateigenschaften wird ein Standardbenutzerprinzipal erstellt. Der Benutzerprinzipal enthält ein Ereignis, das das Ergänzen oder Ersetzen des Prinzipals ermöglicht. Weitere Informationen finden Sie unter Konfigurieren der Zertifikatauthentifizierung in ASP.NET Core.
Die Windows-Authentifizierung wurde auf Linux und macOS erweitert. In vorherigen Versionen war die Windows-Authentifizierung auf IIS und HTTP.sys beschränkt. In ASP.NET Core 3.0 besitzt Kestrel die Möglichkeit, Negotiate, Kerberos und NTLM unter Windows, Linux und macOS für Hosts zu verwenden, die der Windows-Domäne beigetreten sind. Die Kestrel-Unterstützung für diese Authentifizierungsschemas wird durch das Paket Microsoft.AspNetCore.Authentication.Negotiate NuGet bereitgestellt. Wie bei anderen Authentifizierungsdiensten auch sollte erst die Authentifizierung auf App-Ebene und dann der Dienst konfiguriert werden:
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.
}
Hostanforderungen:
Weitere Informationen finden Sie unter Konfigurieren der Windows-Authentifizierung in ASP.NET Core.
Aus den Vorlagen für Webbenutzeroberflächen (Razor Pages, MVC mit Controller und Ansichten) wurde Folgendes entfernt:
Die Angular-Vorlage wurde auf Angular 8 aktualisiert.
Die Vorlage der Razor-Klassenbibliothek (Razor Class Library, RCL) gilt standardmäßig für die Razor-Komponentenentwicklung. Eine neue Vorlagenoption in Visual Studio bietet Vorlagenunterstützung für Seiten und Ansichten. Übergeben Sie beim Erstellen einer RCL aus einer Vorlage in einer Befehlsshell die Option --support-pages-and-views
(dotnet new razorclasslib --support-pages-and-views
).
Die ASP.NET Core 3.0-Vorlagen verwenden den generischen .NET-Host in ASP.NET Core. In vorherigen Versionen wurde WebHostBuilder verwendet. Durch Verwendung des generischen .NET Core-Hosts (HostBuilder) lässt sich eine bessere Integration von ASP.NET Core-Apps in andere, nicht webspezifische Serverszenarios erzielen. Weitere Informationen finden Sie unter HostBuilder ersetzt WebHostBuilder.
Vor ASP.NET Core 3.0 wurden Umgebungsvariablen mit dem Präfix ASPNETCORE_
für die Hostkonfiguration des Webhosts geladen. In Version 3.0 wird AddEnvironmentVariables
zum Laden von Umgebungsvariablen mit dem Präfix DOTNET_
zur Hostkonfiguration mit CreateDefaultBuilder
verwendet.
Der generische Host unterstützt nur die folgenden Typen für die Injektion des Startup
-Konstruktors:
IWebHostEnvironment
Alle Dienste können weiterhin direkt als Argumente in die Startup.Configure
-Methode eingefügt werden. Weitere Informationen finden Sie unter Generic Host restricts Startup constructor injection (aspnet/Announcements #353) (Generischer Host schränkt Startkonstruktorinjektion ein).
ConfigureWebHostDefaults
bereitgestellt wird.Connections.Abstractions
als öffentliche Schnittstelle verfügbar gemacht.HttpRequest.Body.Read
, sind eine häufige Quelle für einen Ressourcenmangel im Thread, der zu App-Abstürzen führt. In 3.0 ist AllowSynchronousIO
standardmäßig deaktiviert.Weitere Informationen finden Sie unter Migrieren von ASP.NET Core 2.2 zu 3.0.
HTTP/2 ist in Kestrel für HTTPS-Endpunkte standardmäßig aktiviert. Die HTTP/2-Unterstützung für IIS oder HTTP.sys ist aktiviert, wenn dies vom Betriebssystem unterstützt wird.
Die Hostingereignisquelle Microsoft.AspNetCore.Hosting
gibt die folgenden neuen EventCounter-Typen zurück, die im Zusammenhang mit eingehenden Anforderungen stehen:
requests-per-second
total-requests
current-requests
failed-requests
Das Endpunktrouting, das den reibungslosen Einsatz von Frameworks (z. B. MVC) mit Middleware ermöglicht, wurde erweitert:
Startup.Configure
-Pipeline für die Anforderungsverarbeitung konfiguriert werden.Weitere Informationen finden Sie unter Routing in ASP.NET Core.
Integritätsprüfungen verwenden das Endpunktrouting mit dem generischen Host. Rufen Sie in Startup.Configure
auf der Endpunkterstellung mit der Endpunkt-URL oder dem relativen Pfad MapHealthChecks
auf:
app.UseEndpoints(endpoints =>
{
endpoints.MapHealthChecks("/health");
});
Für Endpunkte für Integritätsprüfungen gilt Folgendes:
Weitere Informationen finden Sie in den folgenden Artikeln:
Es ist jetzt möglich, mit der System.IO.Pipelines-API den Anforderungstext zu lesen und den Antworttext schreiben. Die HttpRequest.BodyReader
-Eigenschaft stellt PipeReader zum Lesen des Anforderungstexts bereit. Die HttpResponse.BodyWriter
-Eigenschaft stellt PipeWriter zum Schreiben des Antworttexts bereit. HttpRequest.BodyReader
funktioniert analog zum HttpRequest.Body
-Stream. HttpResponse.BodyWriter
funktioniert analog zum HttpResponse.Body
-Stream.
Startfehler beim Hosten von ASP.NET Core-Apps in IIS erzeugen jetzt umfangreichere Diagnosedaten. Diese Fehler werden mit Stapelüberwachung im Windows-Ereignisprotokoll gemeldet, wann immer möglich. Darüber hinaus werden alle Warnungen, Fehler und Ausnahmefehler im Windows-Ereignisprotokoll protokolliert.
.NET Core 3.0 führt eine neue Vorlage für die Workerdienst-App ein. Diese Vorlage dient als Ausgangspunkt für das Schreiben von zeitintensiven Diensten in .NET Core.
Weitere Informationen finden Sie unter:
In früheren Versionen von ASP.NET Core war der Aufruf von UseHsts und UseHttpsRedirection problematisch, wenn die Bereitstellung in Azure Linux oder hinter einem anderen Reverseproxy als IIS erfolgte. Die Problembehebung für frühere Versionen ist unter Das Schema für Linux- und Nicht-IIS-Reverseproxys weiterleiten dokumentiert.
Dieses Szenario wurde in ASP.NET Core 3.0 behoben. Der Host aktiviert die Middleware für weitergeleitete Header, wenn die Umgebungsvariable ASPNETCORE_FORWARDEDHEADERS_ENABLED
auf true
festgelegt ist. ASPNETCORE_FORWARDEDHEADERS_ENABLED
ist in unseren Containerimages auf true
festgelegt.
ASP.NET Core 3.0 enthält viele Verbesserungen, die die Arbeitsspeichernutzung reduzieren und den Durchsatz erhöhen:
Ab ASP.NET Core 3.0 ist .NET Framework kein unterstütztes Zielframework mehr. Projekte, die auf .NET Framework abzielen, können mit dem .NET Core 2.1 LTS-Release weiterhin mit vollständiger Unterstützung ausgeführt werden. Die meisten auf ASP.NET Core 2.1.x bezogenen Pakete werden unbegrenzt unterstützt, auch nach dem dreijährigen LTS-Zeitraum für .NET Core 2.1.
Informationen zur Migration finden Sie unter Portieren Ihres Codes von .NET Framework auf .NET Core.
Das freigegebene ASP.NET Core 3.0-Framework, das im Microsoft.AspNetCore.App-Metapaket enthalten ist, erfordert kein explizites <PackageReference />
-Element in der Projektdatei mehr. Bei Verwendung des Microsoft.NET.Sdk.Web
SDK in der Projektdatei wird automatisch auf das freigegebene Framework verwiesen:
<Project Sdk="Microsoft.NET.Sdk.Web">
Die wichtigsten Assemblys, die aus dem freigegebenen ASP.NET Core 3.0-Framework entfernt wurden:
System.Text.Json
zum Lesen und Schreiben von JSON ein. Weitere Informationen finden Sie im Abschnitt Neue JSON-Serialisierung im vorliegenden Dokument.Eine vollständige Liste der Assemblys, die aus dem freigegebenen Framework entfernt wurden, finden Sie unter Assemblies being removed from Microsoft.AspNetCore.App 3.0 (Assemblys, die aus Microsoft.AspNetCore.App 3.0 entfernt werden). Weitere Informationen zu den Beweggründen für diese Änderung finden Sie unter Breaking changes to Microsoft.AspNetCore.App in 3.0 (Breaking Changes an Microsoft.AspNetCore.App in Version 3.0) und A first look at changes coming in ASP.NET Core 3.0 (Ein erster Blick auf die Änderungen in ASP.NET Core 3.0).
Feedback zu ASP.NET Core
ASP.NET Core ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Ereignisse
Power BI DataViz Weltmeisterschaften
14. Feb., 16 Uhr - 31. März, 16 Uhr
Mit 4 Chancen, ein Konferenzpaket zu gewinnen und es zum LIVE Grand Finale in Las Vegas zu machen
Weitere InformationenTraining
Modul
Modernisieren von ASP.NET-Frameworks zu ASP.NET Core mit dem .NET-Upgrade-Assistenten - Training
In diesem Modul erfahren Sie, wann, warum und wie Sie eine ASP.NET-Framework-App mit dem Upgrade-Assistenten zu ASP.NET Core modernisieren sollten.
Dokumentation
Neuerungen in ASP.NET Core 3.1
Informationen zu den neuen Features in ASP.NET Core 3.1.
Neuerungen in ASP.NET Core 2.2
Informationen zu den neuen Features in ASP.NET Core 2.2.
Neuerungen in ASP.NET Core 1.1
Informationen zu den neuen Features in ASP.NET Core 1.1.