Novità di ASP.NET Core 2.1

Questo articolo evidenzia le modifiche più significative apportate ad ASP.NET Core 2.1, con collegamenti alla relativa documentazione.

SignalR

SignalR è stato riscritto per ASP.NET Core 2.1.

ASP.NET Core SignalR include numerosi miglioramenti:

  • Un modello semplificato di scale-out.
  • Un nuovo client JavaScript senza dipendenza jQuery.
  • Un nuovo protocollo binario compresso basato su MessagePack.
  • Supporto per protocolli personalizzati.
  • Un nuovo modello di risposta streaming.
  • Supporto per client basati su WebSocket.

Per altre informazioni, vedere ASP.NET Core SignalR.

Razor Librerie di classi

ASP.NET Core 2.1 semplifica la compilazione e l'inclusione Razordell'interfaccia utente basata su in una libreria e la condivisione tra più progetti. Il nuovo Razor SDK consente di compilare Razor file in un progetto di libreria di classi che può essere inserito in un pacchetto NuGet. Le visualizzazioni e le pagine delle librerie vengono individuate automaticamente e possono essere sostituite dall'app. Razor Integrando la compilazione nella compilazione:

  • Si riduce notevolmente il tempo di avvio dell'app.
  • Gli aggiornamenti rapidi alle visualizzazioni e alle Razor pagine in fase di esecuzione sono ancora disponibili come parte di un flusso di lavoro di sviluppo iterativo.

Per altre informazioni, vedere Creare un'interfaccia utente riutilizzabile usando il Razor progetto Libreria di classi.

Identity Libreria dell'interfaccia utente e scaffolding

ASP.NET Core 2.1 fornisce ASP.NET CoreIdentitycome libreria di Razor classi. Le app che includono Identity possono applicare il nuovo Identity scaffolder per aggiungere in modo selettivo il codice sorgente contenuto nella IdentityRazor libreria di classi (RCL). Se si vuole generare un codice sorgente, è possibile modificare il codice e modificarne il comportamento. Ad esempio, è possibile indicare allo scaffolder di generare il codice usato nella registrazione. Il codice generato ha la precedenza sullo stesso codice nell'RCL Identity .

Le app che non includono l'autenticazione possono applicare lo Identity scaffolder per aggiungere il pacchetto RCL Identity . È possibile selezionare Identity il codice da generare.

Per altre informazioni, vedere Scaffolding Identity nei progetti ASP.NET Core.

HTTPS

Vista la maggiore attenzione rivolta a sicurezza e privacy, è importante abilitare HTTPS per le app Web. L'imposizione HTTPS sta diventando sempre più rigida sul Web. I siti che non usano HTTPS sono considerati non sicuri. Alcuni browser come Chromium e Mozilla hanno iniziato a imporre che le funzionalità Web siano usate da un contesto protetto. Il Regolamento generale sulla protezione dei dati (GDPR) richiede l'uso di HTTPS per proteggere la privacy degli utenti. Usare HTTPS nell'ambiente di produzione è una questione critica, usarlo nell'ambiente di sviluppo può invece prevenire problemi di distribuzione, ad esempio collegamenti non sicuri. ASP.NET Core 2.1 include numerosi miglioramenti che semplificano l'uso di HTTPS nell'ambiente di sviluppo e la configurazione di HTTPS nell'ambiente di produzione. Per altre informazioni, vedere Applicare HTTPS.

In base all'impostazione predefinita

Per semplificare lo sviluppo di siti Web sicuri, HTTPS è ora abilitato per impostazione predefinita. A partire dalla versione 2.1, Kestrel rimane in https://localhost:5001 ascolto quando è presente un certificato di sviluppo locale. Viene creato un certificato di sviluppo nei casi seguenti:

  • Come parte di completamento dell'installazione di .NET Core SDK, quando si usa SDK per la prima volta.
  • Manualmente tramite il nuovo strumento dev-certs.

Per rendere attendibile il certificato, eseguire dotnet dev-certs https --trust.

Imposizione e reindirizzamento HTTPS

Le app Web sono generalmente in ascolto sia su HTTP sia su HTTPS, ma reindirizzano poi tutto il traffico HTTP a HTTPS. Nella versione 2.1 è stato introdotto un middleware di reindirizzamento HTTPS specializzato che in modo intelligente reindirizza il traffico in base alla configurazione o all'associazione di porte server.

HTTPS può essere ulteriormente rafforzato tramite il protocollo di sicurezza HSTS (sicurezza rigida per il trasporto di HTTP). Il protocollo HSTS indica al browser di accedere sempre al sito tramite HTTPS. ASP.NET Core 2.1 aggiunge il middleware HSTS che supporta le opzioni per la validità massima, i sottodomini e l'elenco di precaricamento HSTS.

Configurazione per l'ambiente di produzione

Nell'ambiente di produzione, HTTPS deve essere configurato in modo esplicito. Nella versione 2.1 è stato aggiunto lo schema di configurazione predefinito per la configurazione di HTTPS per Kestrel . È possibile configurare le app in modo che possano usare gli elementi seguenti:

GDPR

ASP.NET Core offre API e modelli con cui è possibile soddisfare alcuni dei requisiti del GDPR. Per altre informazioni, vedere Supporto per il Regolamento generale sulla protezione dei dati in ASP.NET Core. L'app di esempio illustra come usare e testare molte delle API e dei punti di estensione del GDPR aggiunti nei modelli ASP.NET Core 2.1.

Test di integrazione

È stato introdotto un nuovo pacchetto che semplifica la creazione e l'esecuzione di test. Con il pacchetto Microsoft.AspNetCore.Mvc.Testing è possibile gestire le attività seguenti:

  • Copia il file di dipendenza (*.deps) dall'app testata nella cartella bin del progetto di test.
  • Impostare la radice del contenuto sulla radice del progetto dell'app testata in modo che i file statici e le pagine/visualizzazioni siano rilevate durante l'esecuzione dei test.
  • Fornisce la classe per semplificare il WebApplicationFactory<TEntryPoint> bootstrap dell'app testata con TestServer.

Il test seguente usa xUnit per verificare che la pagina di indice sia caricata con un codice di stato con esito positivo e con l'intestazione Content-Type corretta:

public class BasicTests
    : IClassFixture<WebApplicationFactory<RazorPagesProject.Startup>>
{
    private readonly HttpClient _client;

    public BasicTests(WebApplicationFactory<RazorPagesProject.Startup> factory)
    {
        _client = factory.CreateClient();
    }

    [Fact]
    public async Task GetHomePage()
    {
        // Act
        var response = await _client.GetAsync("/");

        // Assert
        response.EnsureSuccessStatusCode(); // Status Code 200-299
        Assert.Equal("text/html; charset=utf-8",
            response.Content.Headers.ContentType.ToString());
    }
}

Per altre informazioni, vedere l'argomento Test di integrazione.

[ApiController], ActionResult<T>

ASP.NET Core 2.1 aggiunge nuove convenzioni di programmazione che rendono più semplice la compilazione di API Web descrittive e ordinate. ActionResult<T> è una nuova convenzione aggiunta che consente a un'app di restituire un tipo di risposta o qualsiasi altro risultato dell'azione (come IActionResult) e al tempo stesso indicare il tipo di risposta. [ApiController] è un attributo aggiunto per acconsentire esplicitamente a convenzioni e comportamenti specifici per API Web.

Per altre informazioni, vedere Creare API Web con ASP.NET Core.

IHttpClientFactory

ASP.NET Core 2.1 include un nuovo servizio IHttpClientFactory che semplifica la configurazione e l'uso di istanze di HttpClient nelle app. HttpClient include già il concetto di delega di gestori concatenati per le richieste HTTP in uscita. Il factory:

  • Esegue la registrazione di istanze di HttpClient per ogni client denominato in modo più intuitivo.
  • Implementa un gestore Polly che consente di usare i criteri Polly per schemi Retry, CircuitBreakers e così via.

Per altre informazioni, vedere Inizializzare richieste HTTP.

Kestrel Configurazione del trasporto libuv

Con il rilascio di ASP.NET Core 2.1, Kestrelil trasporto predefinito non è più basato su Libuv, ma basato su socket gestiti. Per altre informazioni, vedere Kestrel Implementazione del server Web: Configurazione del trasporto Libuv.

Generatore di host generico

È stato introdotto il generatore di host generico (HostBuilder). È possibile usare il generatore per le app che non elaborano richieste HTTP (messaggistica, attività in background e così via).

Per altre informazioni, vedere Host generico .NET.

Modelli di applicazione a pagina singola aggiornati

I modelli di applicazione a pagina singola per Angular e React vengono aggiornati per usare le strutture di progetto standard e i sistemi di compilazione per ogni framework.

Il modello Angular si basa sull'interfaccia della riga di comando di Angular e il modello React si basa su create-react-app.

Per altre informazioni, vedi:

Razor Le pagine cercano Razor gli asset

Nella versione 2.1 le Razor pagine cercano Razor asset (ad esempio layout e parziali) nelle directory seguenti nell'ordine elencato:

  1. Cartella Pages corrente.
  2. /Pages/Shared/
  3. /Views/Shared/

Razor Pagine in un'area

Razor Le pagine ora supportano le aree. Per visualizzare un esempio di aree, creare una nuova Razor app Web Pages con singoli account utente. Un'app Razor Web Pages con singoli account utente include /Areas/Identity/Pages.

Versione di compatibilità MVC

Il metodo SetCompatibilityVersion consente a un'app di acconsentire o rifiutare esplicitamente modifiche potenzialmente importanti del comportamento introdotte in ASP.NET Core MVC 2.1 o versioni successive.

Per altre informazioni, vedere Versione di compatibilità per ASP.NET Core MVC.

Eseguire la migrazione dalla versione 2.0 alla versione 2.1

Vedere Eseguire la migrazione da ASP.NET Core 2.0 alla versione 2.1.

Informazioni aggiuntive

Per l'elenco completo delle modifiche, vedere le note sulla versione di ASP.NET Core 2.1.