Nozioni fondamentali su ASP.NET CoreASP.NET Core fundamentals

Un'app ASP.NET Core è un'app console che crea un server Web nel suo metodo Program.Main.An ASP.NET Core app is a console app that creates a web server in its Program.Main method. Il metodo Main è il punto di ingresso gestito nell'app:The Main method is the app's managed entry point:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Host .NET Core:The .NET Core Host:

  • Carica il runtime di .NET Core.Loads the .NET Core runtime.
  • Usa il primo argomento della riga di comando come percorso del file binario gestito che contiene il punto di ingresso (Main) e inizia l'esecuzione del codice.Uses the first command-line argument as the path to the managed binary that contains the entry point (Main) and begins code execution.

Il metodo Main richiama WebHost.CreateDefaultBuilder, che segue il modello di generatore per creare un host Web.The Main method invokes WebHost.CreateDefaultBuilder, which follows the builder pattern to create a web host. Il generatore dispone di metodi che definiscono il server Web (ad esempio, UseKestrel) e la classe di avvio (UseStartup).The builder has methods that define the web server (for example, UseKestrel) and the startup class (UseStartup). Nell'esempio precedente il server Web Kestrel viene allocato automaticamente.In the preceding example, the Kestrel web server is automatically allocated. L'host Web di ASP.NET Core tenta l'esecuzione in IIS, se disponibile.ASP.NET Core's web host attempts to run on IIS, if available. Altri server Web, come HTTP.sys, possono essere usati richiamando il metodo di estensione appropriato.Other web servers, such as HTTP.sys, can be used by invoking the appropriate extension method. UseStartup viene spiegato dettagliatamente nella sezione successiva.UseStartup is explained further in the next section.

IWebHostBuilder, il tipo restituito della chiamata WebHost.CreateDefaultBuilder, offre molti metodi facoltativi.IWebHostBuilder, the return type of the WebHost.CreateDefaultBuilder invocation, provides many optional methods. Alcuni di questi metodi includono UseHttpSys per ospitare l'app in HTTP.sys e UseContentRoot per specificare la directory del contenuto radice.Some of these methods include UseHttpSys for hosting the app in HTTP.sys and UseContentRoot for specifying the root content directory. I metodi Build e Run compilano l'oggetto IWebHost che ospita l'app e inizia l'ascolto delle richieste HTTP.The Build and Run methods build the IWebHost object that hosts the app and begins listening for HTTP requests.

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}

Host .NET Core:The .NET Core Host:

  • Carica il runtime di .NET Core.Loads the .NET Core runtime.
  • Usa il primo argomento della riga di comando come percorso del file binario gestito che contiene il punto di ingresso (Main) e inizia l'esecuzione del codice.Uses the first command-line argument as the path to the managed binary that contains the entry point (Main) and begins code execution.

Il metodo Main usa WebHostBuilder, che segue il modello di generatore per creare un host app Web.The Main method uses WebHostBuilder, which follows the builder pattern to create a web app host. Il generatore dispone di metodi che definiscono il server Web (ad esempio, UseKestrel) e la classe di avvio (UseStartup).The builder has methods that define the web server (for example, UseKestrel) and the startup class (UseStartup). Nell'esempio precedente viene usato il server Web Kestrel.In the preceding example, the Kestrel web server is used. Altri server Web, come WebListener, possono essere usati richiamando il metodo di estensione appropriato.Other web servers, such as WebListener, can be used by invoking the appropriate extension method. UseStartup viene spiegato dettagliatamente nella sezione successiva.UseStartup is explained further in the next section.

WebHostBuilder offre molti metodi facoltativi, incluso UseIISIntegration per l'hosting in IIS e IIS Express e UseContentRoot per specificare la directory del contenuto radice.WebHostBuilder provides many optional methods, including UseIISIntegration for hosting in IIS and IIS Express and UseContentRoot for specifying the root content directory. I metodi Build e Run compilano l'oggetto IWebHost che ospita l'app e inizia l'ascolto delle richieste HTTP.The Build and Run methods build the IWebHost object that hosts the app and begins listening for HTTP requests.

AvvioStartup

Il metodo UseStartup su WebHostBuilder specifica la classe Startup per l'app:The UseStartup method on WebHostBuilder specifies the Startup class for your app:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}
public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}

Nella classe Startup viene definita la pipeline di gestione delle richieste e vengono configurati tutti i servizi necessari per l'app.The Startup class is where you define the request handling pipeline and where any services needed by the app are configured. La classe Startup deve essere pubblica e deve contenere i metodi seguenti:The Startup class must be public and contain the following methods:

public class Startup
{
    // This method gets called by the runtime. Use this method
    // to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
    }

    // This method gets called by the runtime. Use this method
    // to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
    }
}
public class Startup
{
    // This method gets called by the runtime. Use this method
    // to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
    }

    // This method gets called by the runtime. Use this method
    // to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
    }
}

ConfigureServices definisce i servizi usati dall'app, come ad esempio ASP.NET Core MVC, Entity Framework Core, Identity.ConfigureServices defines the Services used by your app (for example, ASP.NET Core MVC, Entity Framework Core, Identity). Configure definisce il middleware chiamato nella pipeline delle richieste.Configure defines the middleware called in the request pipeline.

Per ulteriori informazioni, vedere Avvio dell'app in ASP.NET Core.For more information, see Avvio dell'app in ASP.NET Core.

Radice del contenutoContent root

La radice del contenuto è il percorso di base per i contenuti usati dall'app, ad esempio Razor Pages, visualizzazioni MVC e asset statici.The content root is the base path to any content used by the app, such as Razor Pages, MVC views, and static assets. Per impostazione predefinita, la posizione della radice del contenuto è uguale al percorso di base dell'app per il file eseguibile che ospita l'app.By default, the content root is the same location as the app base path for the executable hosting the app.

Radice Web (webroot)Web root (webroot)

La radice Web di un'app è la directory del progetto contenente risorse statiche pubbliche, come ad esempio CSS, JavaScript e i file di immagine.The webroot of an app is the directory in the project containing public, static resources, such as CSS, JavaScript, and image files. Per impostazione predefinita wwwroot è la radice Web.By default, wwwroot is the webroot.

Per i file Razor (. cshtml), il carattere tilde ~/ punta alla radice Web.For Razor (.cshtml) files, the tilde-slash ~/ points to the webroot. I percorsi che iniziano con ~/ sono indicati come percorsi virtuali.Paths beginning with ~/ are referred to as virtual paths.

Iniezione di dipendenze (servizi)Dependency injection (services)

Un servizio è un componente destinato a un utilizzo comune in un'app.A service is a component that's intended for common consumption in an app. I servizi sono resi disponibili tramite l'inserimento delle dipendenze.Services are made available through dependency injection (DI). ASP.NET Core include un'inversione nativa del contenitore del controllo (IoC) che supporta l'inserimento del costruttore per impostazione predefinita.ASP.NET Core includes a native Inversion of Control (IoC) container that supports constructor injection by default. Se si vuole, è possibile sostituire il contenitore predefinito.You can replace the default container if you wish. Oltre al vantaggio dell'accoppiamento debole, l'iniezione delle dipendenze rende disponibili i servizi in tutta l'app, ad esempio la registrazione.In addition to its loose coupling benefit, DI makes services, such as logging, available throughout your app.

Per ulteriori informazioni, vedere Inserimento delle dipendenze in ASP.NET Core.For more information, see Inserimento delle dipendenze in ASP.NET Core.

MiddlewareMiddleware

In ASP.NET Core la pipeline della richiesta viene composta usando un middleware.In ASP.NET Core, you compose your request pipeline using middleware. Il middleware ASP.NET Core esegue le operazioni asincrone su un HttpContext, quindi richiama il middleware successivo nella pipeline oppure termina la richiesta.ASP.NET Core middleware performs asynchronous operations on an HttpContext and then either invokes the next middleware in the pipeline or terminates the request.

Per convenzione viene aggiunto un componente middleware denominato "XYZ" alla pipeline richiamando un metodo di estensione UseXYZ nel metodo Configure.By convention, a middleware component called "XYZ" is added to the pipeline by invoking a UseXYZ extension method in the Configure method.

ASP.NET Core include un ampio set di middleware predefinito ed è possibile scrivere middleware personalizzato.ASP.NET Core includes a rich set of built-in middleware, and you can write your own custom middleware. Open Web Interface for .NET (OWIN), che consente di disaccoppiare le app Web dai server Web, è supportato nelle app ASP.NET Core.Open Web Interface for .NET (OWIN), which allows web apps to be decoupled from web servers, is supported in ASP.NET Core apps.

Per altre informazioni, vedere Middleware di ASP.NET Core e Open Web Interface for .NET (OWIN) con ASP.NET Core.For more information, see Middleware di ASP.NET Core and Open Web Interface for .NET (OWIN) con ASP.NET Core.

Inizializzare richieste HTTPInitiate HTTP requests

IHttpClientFactory è disponibile per accedere alle istanze di HttpClient per effettuare richieste HTTP.IHttpClientFactory is available to access HttpClient instances to make HTTP requests.

Per ulteriori informazioni, vedere Inizializzare richieste HTTP.For more information, see Inizializzare richieste HTTP.

AmbientiEnvironments

Gli ambienti, come ad esempio Sviluppo e Produzione, sono un concetto fondamentale in ASP.NET Core e possono essere impostati usando una variabile di ambiente, un file di impostazioni e un argomento della riga di comando.Environments, such as Development and Production, are a first-class notion in ASP.NET Core and can be set using an environment variable, settings file, and command-line argument.

Per ulteriori informazioni, vedere Usare più ambienti in ASP.NET Core.For more information, see Usare più ambienti in ASP.NET Core.

HostingHosting

Le app ASP.NET Core configurano e avviano un host, che è responsabile della gestione dell'avvio e della durata delle app.ASP.NET Core apps configure and launch a host, which is responsible for app startup and lifetime management.

Per ulteriori informazioni, vedere Hosting in ASP.NET Core.For more information, see Hosting in ASP.NET Core.

ServerServers

Il modello di hosting di ASP.NET Core non è direttamente in ascolto delle richieste.The ASP.NET Core hosting model doesn't directly listen for requests. Il modello di hosting si basa su un'implementazione del server HTTP per inoltrare la richiesta all'app.The hosting model relies on an HTTP server implementation to forward the request to the app. La richiesta inoltrata viene inclusa come un set di oggetti di funzionalità cui è possibile accedere tramite le interfacce.The forwarded request is wrapped as a set of feature objects that can be accessed through interfaces. ASP.NET Core include un server Web gestito, multipiattaforma, denominato Kestrel.ASP.NET Core includes a managed, cross-platform web server, called Kestrel. Kestrel viene eseguito di solito con un server Web di produzione, ad esempio IIS oppure Nginx in una configurazione con proxy inverso.Kestrel is commonly run behind a production web server, such as IIS or Nginx in a reverse proxy configuration. Kestrel può essere eseguito anche come server perimetrale pubblico esposto direttamente a Internet in ASP.NET Core 2.0 o versione successiva.Kestrel can also be run as a public-facing edge server exposed directly to the Internet in ASP.NET Core 2.0 or later.

Per ulteriori informazioni, vedere Implementazioni di server Web in ASP.NET Core.For more information, see Implementazioni di server Web in ASP.NET Core.

ConfigurazioneConfiguration

ASP.NET Core usa un modello di configurazione basato sulle coppie nome-valore.ASP.NET Core uses a configuration model based on name-value pairs. Il modello di configurazione non è basato su System.Configuration o su web.config. La configurazione ottiene le impostazioni da un set ordinato di provider di configurazione.The configuration model isn't based on System.Configuration or web.config. Configuration obtains settings from an ordered set of configuration providers. I provider di configurazione predefiniti supportano un'ampia gamma di formati di file (XML, JSON, INI), di variabili di ambiente e di argomenti della riga di comando.The built-in configuration providers support a variety of file formats (XML, JSON, INI), environment variables, and command-line arguments. È anche possibile scrivere i propri provider di configurazione personalizzata.You can also write your own custom configuration providers.

Per ulteriori informazioni, vedere Configurazione in ASP.NET Core.For more information, see Configurazione in ASP.NET Core.

RegistrazioneLogging

ASP.NET Core supporta un'API di registrazione che funziona con un'ampia gamma di provider di registrazione.ASP.NET Core supports a Logging API that works with a variety of logging providers. I provider predefiniti supportano l'invio dei registri a una o più destinazioni.Built-in providers support sending logs to one or more destinations. È possibile usare framework di registrazione di terze parti.Third-party logging frameworks can be used.

Per ulteriori informazioni, vedere Registrazione in ASP.NET Core.For more information, see Registrazione in ASP.NET Core.

Gestione degli erroriError handling

ASP.NET Core include scenari predefiniti per la gestione degli errori nelle app, tra cui una pagina di eccezioni per gli sviluppatori, pagine di errore personalizzate, pagine di codici di stato statici e la gestione delle eccezioni all'avvio.ASP.NET Core has built-in scenarios for handling errors in apps, including a developer exception page, custom error pages, static status code pages, and startup exception handling.

Per ulteriori informazioni, vedere Gestire gli errori in ASP.NET Core.For more information, see Gestire gli errori in ASP.NET Core.

RoutingRouting

ASP.NET Core offre scenari per il routing delle richieste di app ai gestori di route.ASP.NET Core offers scenarios for routing of app requests to route handlers.

Per ulteriori informazioni, vedere Routing in ASP.NET Core.For more information, see Routing in ASP.NET Core.

Attività in backgroundBackground tasks

Le attività in background vengono implementate come servizi ospitati.Background tasks are implemented as hosted services. Un servizio ospitato è una classe con logica di attività in background che implementa l'interfaccia IHostedService.A hosted service is a class with background task logic that implements the IHostedService interface.

Per ulteriori informazioni, vedere Attività in background con servizi ospitati in ASP.NET Core.For more information, see Attività in background con servizi ospitati in ASP.NET Core.

Accedere a HttpContextAccess HttpContext

HttpContext è disponibile automaticamente durante l'elaborazione delle richieste con Razor Pages e MVC.HttpContext is automatically available when processing requests with Razor Pages and MVC. In circostanze in cui HttpContext non è immediatamente disponibile, è possibile accedere a HttpContext tramite l'interfaccia IHttpContextAccessor e la relativa implementazione predefinita, HttpContextAccessor.In circumstances where HttpContext isn't readily available, you can access the HttpContext through the IHttpContextAccessor interface and its default implementation, HttpContextAccessor.

Per ulteriori informazioni, vedere Accedere a HttpContext in ASP.NET Core.For more information, see Accedere a HttpContext in ASP.NET Core.