Novità di ASP.NET Core 9.0
Questo articolo illustra le modifiche più significative in ASP.NET Core 9.0 con collegamenti alla documentazione pertinente.
Questo articolo è stato aggiornato per .NET 9 Preview 3.
Blazor
In questa sezione vengono descritte le nuove funzionalità per Blazor.
Inserimento del costruttore
Razor i componenti supportano l'inserimento del costruttore.
Nell'esempio seguente la classe parziale (code-behind) inserisce il NavigationManager
servizio usando un costruttore primario:
public partial class ConstructorInjection(NavigationManager navigation)
{
protected NavigationManager Navigation { get; } = navigation;
}
Per altre informazioni, vedere ASP.NET Core Blazor dependency injection.
Compressione Websocket per componenti Interactive Server
Per impostazione predefinita, i componenti Interactive Server abilitano la compressione per le connessioni WebSocket e impostano una frame-ancestors
direttiva CSP (Content Security Policy) impostata su 'self'
, che consente solo l'incorporamento dell'app in un'origine <iframe>
da cui viene servita l'app quando è abilitata la compressione o quando viene fornita una configurazione per il contesto WebSocket.
La compressione può essere disabilitata impostando ConfigureWebSocketOptions
su null
, che riduce la vulnerabilità dell'app per l'attacco , ma può comportare una riduzione delle prestazioni:
.AddInteractiveServerRenderMode(o => o.ConfigureWebSocketOptions = null)
Configurare un provider di servizi di 'none'
configurazione più frame-ancestors
rigoroso con il valore (virgolette singole necessarie), che consente la compressione WebSocket, ma impedisce ai browser di incorporare l'app in qualsiasi <iframe>
:
.AddInteractiveServerRenderMode(o => o.ContentSecurityFrameAncestorsPolicy = "'none'")
Per ulteriori informazioni, vedi le seguenti risorse:
- Linee guida per ASP.NET Core BlazorSignalR
- Linee guida per la mitigazione delle minacce per ASP.NET rendering lato server interattivo Core Blazor
Gestire gli eventi di composizione della tastiera in Blazor
La nuova KeyboardEventArgs.IsComposing
proprietà indica se l'evento della tastiera fa parte di una sessione di composizione. Tenere traccia dello stato di composizione degli eventi della tastiera è fondamentale per la gestione dei metodi di input dei caratteri internazionali.
SignalR
In questa sezione vengono descritte le nuove funzionalità per SignalR.
Supporto dei tipi polimorfici in SignalR Hub
I metodi hub ora possono accettare una classe base anziché la classe derivata per abilitare scenari polimorfici. Il tipo di base deve essere annotato per consentire il polimorfismo.
public class MyHub : Hub
{
public void Method(JsonPerson person)
{
if (person is JsonPersonExtended)
{
}
else if (person is JsonPersonExtended2)
{
}
else
{
}
}
}
[JsonPolymorphic]
[JsonDerivedType(typeof(JsonPersonExtended), nameof(JsonPersonExtended))]
[JsonDerivedType(typeof(JsonPersonExtended2), nameof(JsonPersonExtended2))]
private class JsonPerson
{
public string Name { get; set; }
public Person Child { get; set; }
public Person Parent { get; set; }
}
private class JsonPersonExtended : JsonPerson
{
public int Age { get; set; }
}
private class JsonPersonExtended2 : JsonPerson
{
public string Location { get; set; }
}
API minime
Questa sezione descrive le nuove funzionalità per le API minime.
Aggiunta di InternalServerError
e InternalServerError<TValue>
a TypedResults
La TypedResults classe è un veicolo utile per restituire risposte basate su codice di stato HTTP fortemente tipizzato da un'API minima. TypedResults
include ora i metodi e i tipi factory per restituire le risposte "500 Internal Server Error" dagli endpoint. Ecco un esempio che restituisce una risposta 500:
var app = WebApplication.Create();
app.MapGet("/", () => TypedResults.InternalServerError("Something went wrong!"));
app.Run();
Autenticazione e autorizzazione
In questa sezione vengono descritte le nuove funzionalità per l'autenticazione e l'autorizzazione.
Personalizzazione dei parametri OIDC e OAuth
I gestori di autenticazione OAuth e OIDC ora hanno un'opzione AdditionalAuthorizationParameters
per semplificare la personalizzazione dei parametri dei messaggi di autorizzazione che vengono in genere inclusi come parte della stringa di query di reindirizzamento. In .NET 8 e versioni precedenti, è necessario un callback personalizzato OnRedirectToIdentityProvider o un metodo sottoposto BuildChallengeUrl a override in un gestore personalizzato. Ecco un esempio di codice .NET 8:
builder.Services.AddAuthentication().AddOpenIdConnect(options =>
{
options.Events.OnRedirectToIdentityProvider = context =>
{
context.ProtocolMessage.SetParameter("prompt", "login");
context.ProtocolMessage.SetParameter("audience", "https://api.example.com");
return Task.CompletedTask;
};
});
L'esempio precedente può ora essere semplificato con il codice seguente:
builder.Services.AddAuthentication().AddOpenIdConnect(options =>
{
options.AdditionalAuthorizationParameters.Add("prompt", "login");
options.AdditionalAuthorizationParameters.Add("audience", "https://api.example.com");
});
Configurare HTTP.sys flag di autenticazione estesa
È ora possibile configurare i HTTP_AUTH_EX_FLAG_ENABLE_KERBEROS_CREDENTIAL_CACHING
flag e HTTP_AUTH_EX_FLAG_CAPTURE_CREDENTIAL
HTTP.sys usando le nuove EnableKerberosCredentialCaching
proprietà e CaptureCredentials
nel HTTP.sys per ottimizzare la modalità di gestione delle autenticazione di WindowsAuthenticationManager. Ad esempio:
webBuilder.UseHttpSys(options =>
{
options.Authentication.Schemes = AuthenticationSchemes.Negotiate;
options.Authentication.EnableKerberosCredentialCaching = true;
options.Authentication.CaptureCredentials = true;
});
Varie
Le sezioni seguenti descrivono varie nuove funzionalità.
Metadati dell'endpoint nella pagina delle eccezioni per sviluppatori
Gli attributi aggiunti alle azioni MVC, alle API minime e ai metodi gRPC sono esempi di metadati dell'endpoint. ASP.NET Core usa i metadati degli endpoint per controllare il comportamento dell'endpoint, ad esempio routing, autenticazione e autorizzazione, memorizzazione nella cache delle risposte, limitazione della frequenza, generazione OpenAPI e altro ancora.
.NET 9 aggiunge metadati alla pagina delle eccezioni dello sviluppatore. Le nuove informazioni sui metadati vengono visualizzate nella Routing
sezione insieme ad altre informazioni di routing. Queste informazioni semplificano il debug degli errori di base ASP.NET durante lo sviluppo. L'immagine seguente mostra le nuove informazioni sui metadati nella pagina delle eccezioni dello sviluppatore:
Miglioramenti del debug del dizionario
La visualizzazione del debug di dizionari e altre raccolte chiave-valore ha un layout migliorato. La chiave viene visualizzata nella colonna chiave del debugger invece di essere concatenata con il valore . Le immagini seguenti mostrano la visualizzazione precedente e nuova di un dizionario nel debugger.
Prima:
Dopo:
ASP.NET Core include molte raccolte chiave-valore. Questa esperienza di debug migliorata si applica a:
- Intestazioni HTTP
- Stringhe di query
- Form
- Cookies
- Visualizzare i dati
- Dati route
- Funzionalità
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per