WebApplication et WebApplicationBuilder dans les applications API minimales
Remarque
Ceci n’est pas la dernière version de cet article. Pour la version actuelle, consultez la version .NET 8 de cet article.
Avertissement
Cette version d’ASP.NET Core n’est plus prise en charge. Pour plus d’informations, consultez la Stratégie de prise en charge de .NET et .NET Core. Pour la version actuelle, consultez la version .NET 8 de cet article.
Important
Ces informations portent sur la préversion du produit, qui est susceptible d’être en grande partie modifié avant sa commercialisation. Microsoft n’offre aucune garantie, expresse ou implicite, concernant les informations fournies ici.
Pour la version actuelle, consultez la version .NET 8 de cet article.
WebApplication
Le code suivant est généré par un modèle ASP.NET Core :
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Le code précédent peut être créé via dotnet new web
sur la ligne de commande ou en sélectionnant le modèle web Vide dans Visual Studio.
Le code suivant crée un WebApplication (app
) sans créer explicitement de WebApplicationBuilder :
var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.Run();
WebApplication.Create
initialise une nouvelle instance de la classe WebApplication avec les valeurs par défaut préconfigurées.
WebApplication
ajoute automatiquement l’intergiciel suivant à Minimal API applications
en fonction de certaines conditions :
UseDeveloperExceptionPage
est ajouté en premier lorsqueHostingEnvironment
est"Development"
.UseRouting
est ajouté ensuite si le code utilisateur n’a pas déjà appeléUseRouting
et s’il existe des points de terminaison configurés, par exempleapp.MapGet
.UseEndpoints
est ajouté à la fin du pipeline d’intergiciel si des points de terminaison sont configurés.UseAuthentication
est ajouté immédiatement aprèsUseRouting
, si le code utilisateur n’a pas déjà appeléUseAuthentication
et siIAuthenticationSchemeProvider
peut être détecté dans le fournisseur de services.IAuthenticationSchemeProvider
est ajouté par défaut lors de l’utilisation deAddAuthentication
, et les services sont détectés à l’aide deIServiceProviderIsService
.UseAuthorization
est ajouté après, si le code utilisateur n’a pas déjà appeléUseAuthorization
et siIAuthorizationHandlerProvider
peut être détecté dans le fournisseur de services.IAuthorizationHandlerProvider
est ajouté par défaut lors de l’utilisation deAddAuthorization
, et les services sont détectés à l’aide deIServiceProviderIsService
.- Les intergiciels et les points de terminaison configurés par l’utilisateur sont ajoutés entre
UseRouting
etUseEndpoints
.
Le code suivant est effectivement ce qu’un intergiciel automatique ajouté à l’application produit :
if (isDevelopment)
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
if (isAuthenticationConfigured)
{
app.UseAuthentication();
}
if (isAuthorizationConfigured)
{
app.UseAuthorization();
}
// user middleware/endpoints
app.CustomMiddleware(...);
app.MapGet("/", () => "hello world");
// end user middleware/endpoints
app.UseEndpoints(e => {});
Dans certains cas, la configuration de l’intergiciel par défaut n’est pas correcte pour l’application et exige une modification. Par exemple, UseCors doit être appelé avant UseAuthentication et UseAuthorization. L’application doit appeler UseAuthentication
et UseAuthorization
, si UseCors
est appelé :
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
Si l’intergiciel doit être exécuté avant l’exécution de la correspondance d’itinéraire, appeler UseRouting et placer l’intergiciel avant l’appel à UseRouting
. UseEndpoints n’est pas obligatoire dans ce cas, car il est automatiquement ajouté comme décrit précédemment :
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// other middleware and endpoints
Lors de l’ajout d’un intergiciel de terminal :
- L’intergiciel doit être ajouté après
UseEndpoints
. - L’application doit appeler
UseRouting
etUseEndpoints
pour que l’intergiciel de terminal puisse être placé à l’emplacement approprié.
app.UseRouting();
app.MapGet("/", () => "hello world");
app.UseEndpoints(e => {});
app.Run(context =>
{
context.Response.StatusCode = 404;
return Task.CompletedTask;
});
Un intergiciel de terminal est un intergiciel qui s’exécute si aucun point de terminaison ne gère la requête.
Utilisation des ports
Lorsqu’une application web est créée avec Visual Studio ou dotnet new
, un fichier Properties/launchSettings.json
est créé et spécifie les ports auxquels l’application répond. Dans les exemples de paramètres de port qui suivent, l’exécution de l’application à partir de Visual Studio renvoie une boîte de dialogue d’erreur Unable to connect to web server 'AppName'
. Visual Studio retourne une erreur, car il attend le port spécifié dans Properties/launchSettings.json
, mais l’application utilise le port spécifié par app.Run("http://localhost:3000")
. Exécutez les exemples de modification de port suivants à partir de la ligne de commande.
Les sections suivantes définissent le port auquel l’application répond.
var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.Run("http://localhost:3000");
Dans le code précédent, l’application répond au port 3000
.
Plusieurs ports
Dans le code suivant, l’application répond aux ports 3000
et 4000
.
var app = WebApplication.Create(args);
app.Urls.Add("http://localhost:3000");
app.Urls.Add("http://localhost:4000");
app.MapGet("/", () => "Hello World");
app.Run();
Définir le port à partir de la ligne de commande
La commande suivante permet à l’application de répondre au port 7777
:
dotnet run --urls="https://localhost:7777"
Si le point de terminaison Kestrel est également configuré dans le fichier appsettings.json
, l’URL spécifiée par le fichier appsettings.json
est utilisée. Pour plus d’informations, consultez Configuration du point de terminaison Kestrel
Lire le port à partir de l’environnement
Le code suivant lit le port à partir de l’environnement :
var app = WebApplication.Create(args);
var port = Environment.GetEnvironmentVariable("PORT") ?? "3000";
app.MapGet("/", () => "Hello World");
app.Run($"http://localhost:{port}");
La méthode recommandée pour définir le port à partir de l’environnement consiste à utiliser la variable d’environnement ASPNETCORE_URLS
, comme indiqué dans la section suivante.
Définir les ports via la variable d’environnement ASPNETCORE_URLS
La variable d’environnement ASPNETCORE_URLS
est disponible pour définir le port :
ASPNETCORE_URLS=http://localhost:3000
ASPNETCORE_URLS
prend en charge plusieurs URL :
ASPNETCORE_URLS=http://localhost:3000;https://localhost:5000
Pour plus d’informations sur l’utilisation de l’environnement, consultez Utiliser plusieurs environnements dans ASP.NET Core
Écouter sur toutes les interfaces
Les exemples suivants illustrent l’écoute sur toutes les interfaces
http://*:3000
var app = WebApplication.Create(args);
app.Urls.Add("http://*:3000");
app.MapGet("/", () => "Hello World");
app.Run();
http://+:3000
var app = WebApplication.Create(args);
app.Urls.Add("http://+:3000");
app.MapGet("/", () => "Hello World");
app.Run();
http://0.0.0.0:3000
var app = WebApplication.Create(args);
app.Urls.Add("http://0.0.0.0:3000");
app.MapGet("/", () => "Hello World");
app.Run();
Écoutez toutes les interfaces à l’aide d’ASPNETCORE_URLS
Les exemples précédents peuvent utiliser ASPNETCORE_URLS
ASPNETCORE_URLS=http://*:3000;https://+:5000;http://0.0.0.0:5005
Spécifier HTTPS avec un certificat de développement
var app = WebApplication.Create(args);
app.Urls.Add("https://localhost:3000");
app.MapGet("/", () => "Hello World");
app.Run();
Pour plus d’informations sur le certificat de développement, consultez Approuver le certificat de développement HTTPS ASP.NET Core sur Windows et macOS.
Spécifier HTTPS à l’aide d’un certificat personnalisé
Les sections suivantes montrent comment spécifier le certificat personnalisé à l’aide du fichier appsettings.json
et via la configuration.
Spécifier le certificat personnalisé avec appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Kestrel": {
"Certificates": {
"Default": {
"Path": "cert.pem",
"KeyPath": "key.pem"
}
}
}
}
Spécifier le certificat personnalisé via la configuration
var builder = WebApplication.CreateBuilder(args);
// Configure the cert and the key
builder.Configuration["Kestrel:Certificates:Default:Path"] = "cert.pem";
builder.Configuration["Kestrel:Certificates:Default:KeyPath"] = "key.pem";
var app = builder.Build();
app.Urls.Add("https://localhost:3000");
app.MapGet("/", () => "Hello World");
app.Run();
Utiliser les API de certificat
using System.Security.Cryptography.X509Certificates;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(options =>
{
options.ConfigureHttpsDefaults(httpsOptions =>
{
var certPath = Path.Combine(builder.Environment.ContentRootPath, "cert.pem");
var keyPath = Path.Combine(builder.Environment.ContentRootPath, "key.pem");
httpsOptions.ServerCertificate = X509Certificate2.CreateFromPemFile(certPath,
keyPath);
});
});
var app = builder.Build();
app.Urls.Add("https://localhost:3000");
app.MapGet("/", () => "Hello World");
app.Run();
Configuration
Le code suivant est lu à partir du système de configuration :
var app = WebApplication.Create(args);
var message = app.Configuration["HelloKey"] ?? "Config failed!";
app.MapGet("/", () => message);
app.Run();
Pour plus d’informations, consultez Configuration dans ASP.NET Core
Journalisation
Le code suivant écrit un message dans le journal au démarrage de l’application :
var app = WebApplication.Create(args);
app.Logger.LogInformation("The app started");
app.MapGet("/", () => "Hello World");
app.Run();
Pour plus d’informations, consultez Journalisation dans .NET Core et ASP.NET Core
Accéder au conteneur d’injection de dépendances (DI)
Le code suivant montre comment obtenir des services à partir du conteneur d’authentification unique au démarrage de l’application :
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddScoped<SampleService>();
var app = builder.Build();
app.MapControllers();
using (var scope = app.Services.CreateScope())
{
var sampleService = scope.ServiceProvider.GetRequiredService<SampleService>();
sampleService.DoSomething();
}
app.Run();
Pour plus d’informations, consultez Injection de dépendances dans ASP.NET Core.
WebApplicationBuilder
Cette section contient un exemple de code utilisant WebApplicationBuilder.
Modifier la racine du contenu, le nom de l’application et l’environnement
Le code suivant définit la racine du contenu, le nom de l’application et l’environnement :
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
Args = args,
ApplicationName = typeof(Program).Assembly.FullName,
ContentRootPath = Directory.GetCurrentDirectory(),
EnvironmentName = Environments.Staging,
WebRootPath = "customwwwroot"
});
Console.WriteLine($"Application Name: {builder.Environment.ApplicationName}");
Console.WriteLine($"Environment Name: {builder.Environment.EnvironmentName}");
Console.WriteLine($"ContentRoot Path: {builder.Environment.ContentRootPath}");
Console.WriteLine($"WebRootPath: {builder.Environment.WebRootPath}");
var app = builder.Build();
WebApplication.CreateBuilder initialise une nouvelle instance de la classe WebApplicationBuilder avec les valeurs par défaut préconfigurées.
Pour plus d’informations, consultez Vue d’ensemble des principes de base d’ASP.NET Core
Modifier la racine du contenu, le nom de l’application et l’environnement à l’aide de variables d’environnement ou de la ligne de commande
Le tableau suivant montre la variable d’environnement et l’argument de ligne de commande utilisés pour modifier la racine du contenu, le nom de l’application et l’environnement :
fonctionnalité | Variable d’environnement | Argument de ligne de commande |
---|---|---|
Nom de l'application | ASPNETCORE_APPLICATIONNAME | --applicationName |
Nom de l’environnement | ASPNETCORE_ENVIRONMENT | --environment |
Racine de contenu | ASPNETCORE_CONTENTROOT | --contentRoot |
Ajouter des fournisseurs de configuration
L’exemple suivant ajoute le fournisseur de configuration INI :
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddIniFile("appsettings.ini");
var app = builder.Build();
Pour plus d’informations, consultez Fournisseurs de configuration de fichiers dans Configuration dans ASP.NET Core.
Configuration de lecture
Par défaut, WebApplicationBuilder lit la configuration à partir de plusieurs sources, notamment :
appSettings.json
etappSettings.{environment}.json
- Variables d’environnement
- Ligne de commande
Le code suivant lit HelloKey
à partir de la configuration et affiche la valeur au niveau du point de terminaison /
. Si la valeur de configuration est null, « Hello » est affecté à message
:
var builder = WebApplication.CreateBuilder(args);
var message = builder.Configuration["HelloKey"] ?? "Hello";
var app = builder.Build();
app.MapGet("/", () => message);
app.Run();
Pour obtenir la liste complète des sources de configuration lues, consultez Configuration par défaut dans Configuration dans ASP.NET Core
Ajouter des fournisseurs de journalisation
var builder = WebApplication.CreateBuilder(args);
// Configure JSON logging to the console.
builder.Logging.AddJsonConsole();
var app = builder.Build();
app.MapGet("/", () => "Hello JSON console!");
app.Run();
Ajouter des services
var builder = WebApplication.CreateBuilder(args);
// Add the memory cache services.
builder.Services.AddMemoryCache();
// Add a custom scoped service.
builder.Services.AddScoped<ITodoRepository, TodoRepository>();
var app = builder.Build();
Personnaliser IHostBuilder
Les méthodes d’extension existantes sur IHostBuilder sont accessibles à l’aide de la propriété Host :
var builder = WebApplication.CreateBuilder(args);
// Wait 30 seconds for graceful shutdown.
builder.Host.ConfigureHostOptions(o => o.ShutdownTimeout = TimeSpan.FromSeconds(30));
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Personnaliser IWebHostBuilder
Les méthodes d’extension sur IWebHostBuilder sont accessibles à l’aide de la propriété WebApplicationBuilder.WebHost.
var builder = WebApplication.CreateBuilder(args);
// Change the HTTP server implemenation to be HTTP.sys based
builder.WebHost.UseHttpSys();
var app = builder.Build();
app.MapGet("/", () => "Hello HTTP.sys");
app.Run();
Modifier la racine web
Par défaut, la racine web est relative à la racine de contenu dans le dossier wwwroot
. La racine web est l’endroit où l’intergiciel de fichiers statiques recherche les fichiers statiques. La racine web peut être modifiée avec WebHostOptions
, la ligne de commande ou avec la méthode UseWebRoot :
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
Args = args,
// Look for static files in webroot
WebRootPath = "webroot"
});
var app = builder.Build();
app.Run();
Conteneur d’injection de dépendances (DI) personnalisé
L’exemple suivant utilise Autofac :
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
// Register services directly with Autofac here. Don't
// call builder.Populate(), that happens in AutofacServiceProviderFactory.
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new MyApplicationModule()));
var app = builder.Build();
Ajouter un intergiciel
Tout intergiciel ASP.NET Core existant peut être configuré sur WebApplication
:
var app = WebApplication.Create(args);
// Setup the file server to serve static files.
app.UseFileServer();
app.MapGet("/", () => "Hello World!");
app.Run();
Pour plus d’informations, consultez Intergiciel (middleware) ASP.NET Core
Page d’exceptions du développeur
WebApplication.CreateBuilder initialise une nouvelle instance de la classe WebApplicationBuilder avec les valeurs par défaut préconfigurées. La page d’exception du développeur est activée dans les valeurs par défaut préconfigurées. Lorsque le code suivant est exécuté dans l’environnement de développement, la navigation vers /
présente une page conviviale qui affiche l’exception.
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () =>
{
throw new InvalidOperationException("Oops, the '/' route has thrown an exception.");
});
app.Run();
WebApplication
Le code suivant est généré par un modèle ASP.NET Core :
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Le code précédent peut être créé via dotnet new web
sur la ligne de commande ou en sélectionnant le modèle web Vide dans Visual Studio.
Le code suivant crée un WebApplication (app
) sans créer explicitement de WebApplicationBuilder :
var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.Run();
WebApplication.Create
initialise une nouvelle instance de la classe WebApplication avec les valeurs par défaut préconfigurées.
WebApplication
ajoute automatiquement l’intergiciel suivant à Minimal API applications
en fonction de certaines conditions :
UseDeveloperExceptionPage
est ajouté en premier lorsqueHostingEnvironment
est"Development"
.UseRouting
est ajouté ensuite si le code utilisateur n’a pas déjà appeléUseRouting
et s’il existe des points de terminaison configurés, par exempleapp.MapGet
.UseEndpoints
est ajouté à la fin du pipeline d’intergiciel si des points de terminaison sont configurés.UseAuthentication
est ajouté immédiatement aprèsUseRouting
, si le code utilisateur n’a pas déjà appeléUseAuthentication
et siIAuthenticationSchemeProvider
peut être détecté dans le fournisseur de services.IAuthenticationSchemeProvider
est ajouté par défaut lors de l’utilisation deAddAuthentication
, et les services sont détectés à l’aide deIServiceProviderIsService
.UseAuthorization
est ajouté après, si le code utilisateur n’a pas déjà appeléUseAuthorization
et siIAuthorizationHandlerProvider
peut être détecté dans le fournisseur de services.IAuthorizationHandlerProvider
est ajouté par défaut lors de l’utilisation deAddAuthorization
, et les services sont détectés à l’aide deIServiceProviderIsService
.- Les intergiciels et les points de terminaison configurés par l’utilisateur sont ajoutés entre
UseRouting
etUseEndpoints
.
Le code suivant est effectivement ce qu’un intergiciel automatique ajouté à l’application produit :
if (isDevelopment)
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
if (isAuthenticationConfigured)
{
app.UseAuthentication();
}
if (isAuthorizationConfigured)
{
app.UseAuthorization();
}
// user middleware/endpoints
app.CustomMiddleware(...);
app.MapGet("/", () => "hello world");
// end user middleware/endpoints
app.UseEndpoints(e => {});
Dans certains cas, la configuration de l’intergiciel par défaut n’est pas correcte pour l’application et exige une modification. Par exemple, UseCors doit être appelé avant UseAuthentication et UseAuthorization. L’application doit appeler UseAuthentication
et UseAuthorization
, si UseCors
est appelé :
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
Si l’intergiciel doit être exécuté avant l’exécution de la correspondance d’itinéraire, appeler UseRouting et placer l’intergiciel avant l’appel à UseRouting
. UseEndpoints n’est pas obligatoire dans ce cas, car il est automatiquement ajouté comme décrit précédemment :
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// other middleware and endpoints
Lors de l’ajout d’un intergiciel de terminal :
- L’intergiciel doit être ajouté après
UseEndpoints
. - L’application doit appeler
UseRouting
etUseEndpoints
pour que l’intergiciel de terminal puisse être placé à l’emplacement approprié.
app.UseRouting();
app.MapGet("/", () => "hello world");
app.UseEndpoints(e => {});
app.Run(context =>
{
context.Response.StatusCode = 404;
return Task.CompletedTask;
});
Un intergiciel de terminal est un intergiciel qui s’exécute si aucun point de terminaison ne gère la requête.
Utilisation des ports
Lorsqu’une application web est créée avec Visual Studio ou dotnet new
, un fichier Properties/launchSettings.json
est créé et spécifie les ports auxquels l’application répond. Dans les exemples de paramètres de port qui suivent, l’exécution de l’application à partir de Visual Studio renvoie une boîte de dialogue d’erreur Unable to connect to web server 'AppName'
. Visual Studio retourne une erreur, car il attend le port spécifié dans Properties/launchSettings.json
, mais l’application utilise le port spécifié par app.Run("http://localhost:3000")
. Exécutez les exemples de modification de port suivants à partir de la ligne de commande.
Les sections suivantes définissent le port auquel l’application répond.
var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.Run("http://localhost:3000");
Dans le code précédent, l’application répond au port 3000
.
Plusieurs ports
Dans le code suivant, l’application répond aux ports 3000
et 4000
.
var app = WebApplication.Create(args);
app.Urls.Add("http://localhost:3000");
app.Urls.Add("http://localhost:4000");
app.MapGet("/", () => "Hello World");
app.Run();
Définir le port à partir de la ligne de commande
La commande suivante permet à l’application de répondre au port 7777
:
dotnet run --urls="https://localhost:7777"
Si le point de terminaison Kestrel est également configuré dans le fichier appsettings.json
, l’URL spécifiée par le fichier appsettings.json
est utilisée. Pour plus d’informations, consultez Configuration du point de terminaison Kestrel
Lire le port à partir de l’environnement
Le code suivant lit le port à partir de l’environnement :
var app = WebApplication.Create(args);
var port = Environment.GetEnvironmentVariable("PORT") ?? "3000";
app.MapGet("/", () => "Hello World");
app.Run($"http://localhost:{port}");
La méthode recommandée pour définir le port à partir de l’environnement consiste à utiliser la variable d’environnement ASPNETCORE_URLS
, comme indiqué dans la section suivante.
Définir les ports via la variable d’environnement ASPNETCORE_URLS
La variable d’environnement ASPNETCORE_URLS
est disponible pour définir le port :
ASPNETCORE_URLS=http://localhost:3000
ASPNETCORE_URLS
prend en charge plusieurs URL :
ASPNETCORE_URLS=http://localhost:3000;https://localhost:5000
Écouter sur toutes les interfaces
Les exemples suivants illustrent l’écoute sur toutes les interfaces
http://*:3000
var app = WebApplication.Create(args);
app.Urls.Add("http://*:3000");
app.MapGet("/", () => "Hello World");
app.Run();
http://+:3000
var app = WebApplication.Create(args);
app.Urls.Add("http://+:3000");
app.MapGet("/", () => "Hello World");
app.Run();
http://0.0.0.0:3000
var app = WebApplication.Create(args);
app.Urls.Add("http://0.0.0.0:3000");
app.MapGet("/", () => "Hello World");
app.Run();
Écoutez toutes les interfaces à l’aide d’ASPNETCORE_URLS
Les exemples précédents peuvent utiliser ASPNETCORE_URLS
ASPNETCORE_URLS=http://*:3000;https://+:5000;http://0.0.0.0:5005
Écoutez toutes les interfaces à l’aide d’ASPNETCORE_HTTPS_PORTS
Les exemples précédents peuvent utiliser ASPNETCORE_HTTPS_PORTS
et ASPNETCORE_HTTP_PORTS
.
ASPNETCORE_HTTP_PORTS=3000;5005
ASPNETCORE_HTTPS_PORTS=5000
Pour plus d’informations, consultez Configurer des points de terminaison pour le serveur web ASP.NET Core Kestrel
Spécifier HTTPS avec un certificat de développement
var app = WebApplication.Create(args);
app.Urls.Add("https://localhost:3000");
app.MapGet("/", () => "Hello World");
app.Run();
Pour plus d’informations sur le certificat de développement, consultez Approuver le certificat de développement HTTPS ASP.NET Core sur Windows et macOS.
Spécifier HTTPS à l’aide d’un certificat personnalisé
Les sections suivantes montrent comment spécifier le certificat personnalisé à l’aide du fichier appsettings.json
et via la configuration.
Spécifier le certificat personnalisé avec appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Kestrel": {
"Certificates": {
"Default": {
"Path": "cert.pem",
"KeyPath": "key.pem"
}
}
}
}
Spécifier le certificat personnalisé via la configuration
var builder = WebApplication.CreateBuilder(args);
// Configure the cert and the key
builder.Configuration["Kestrel:Certificates:Default:Path"] = "cert.pem";
builder.Configuration["Kestrel:Certificates:Default:KeyPath"] = "key.pem";
var app = builder.Build();
app.Urls.Add("https://localhost:3000");
app.MapGet("/", () => "Hello World");
app.Run();
Utiliser les API de certificat
using System.Security.Cryptography.X509Certificates;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(options =>
{
options.ConfigureHttpsDefaults(httpsOptions =>
{
var certPath = Path.Combine(builder.Environment.ContentRootPath, "cert.pem");
var keyPath = Path.Combine(builder.Environment.ContentRootPath, "key.pem");
httpsOptions.ServerCertificate = X509Certificate2.CreateFromPemFile(certPath,
keyPath);
});
});
var app = builder.Build();
app.Urls.Add("https://localhost:3000");
app.MapGet("/", () => "Hello World");
app.Run();
Lire l’environnement
var app = WebApplication.Create(args);
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/oops");
}
app.MapGet("/", () => "Hello World");
app.MapGet("/oops", () => "Oops! An error happened.");
app.Run();
Pour plus d’informations sur l’utilisation de l’environnement, consultez Utiliser plusieurs environnements dans ASP.NET Core
Configuration
Le code suivant est lu à partir du système de configuration :
var app = WebApplication.Create(args);
var message = app.Configuration["HelloKey"] ?? "Config failed!";
app.MapGet("/", () => message);
app.Run();
Pour plus d’informations, consultez Configuration dans ASP.NET Core
Journalisation
Le code suivant écrit un message dans le journal au démarrage de l’application :
var app = WebApplication.Create(args);
app.Logger.LogInformation("The app started");
app.MapGet("/", () => "Hello World");
app.Run();
Pour plus d’informations, consultez Journalisation dans .NET Core et ASP.NET Core
Accéder au conteneur d’injection de dépendances (DI)
Le code suivant montre comment obtenir des services à partir du conteneur d’authentification unique au démarrage de l’application :
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddScoped<SampleService>();
var app = builder.Build();
app.MapControllers();
using (var scope = app.Services.CreateScope())
{
var sampleService = scope.ServiceProvider.GetRequiredService<SampleService>();
sampleService.DoSomething();
}
app.Run();
Le code suivant montre comment accéder aux clés d’accès à partir du conteneur d’injection de dépendances (DI) en utilisant l’attribut [FromKeyedServices]
:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddKeyedSingleton<ICache, BigCache>("big");
builder.Services.AddKeyedSingleton<ICache, SmallCache>("small");
var app = builder.Build();
app.MapGet("/big", ([FromKeyedServices("big")] ICache bigCache) => bigCache.Get("date"));
app.MapGet("/small", ([FromKeyedServices("small")] ICache smallCache) => smallCache.Get("date"));
app.Run();
public interface ICache
{
object Get(string key);
}
public class BigCache : ICache
{
public object Get(string key) => $"Resolving {key} from big cache.";
}
public class SmallCache : ICache
{
public object Get(string key) => $"Resolving {key} from small cache.";
}
Pour obtenir plus d’informations sur le DI, consultez Injection de dépendances dans ASP.NET Core.
WebApplicationBuilder
Cette section contient un exemple de code utilisant WebApplicationBuilder.
Modifier la racine du contenu, le nom de l’application et l’environnement
Le code suivant définit la racine du contenu, le nom de l’application et l’environnement :
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
Args = args,
ApplicationName = typeof(Program).Assembly.FullName,
ContentRootPath = Directory.GetCurrentDirectory(),
EnvironmentName = Environments.Staging,
WebRootPath = "customwwwroot"
});
Console.WriteLine($"Application Name: {builder.Environment.ApplicationName}");
Console.WriteLine($"Environment Name: {builder.Environment.EnvironmentName}");
Console.WriteLine($"ContentRoot Path: {builder.Environment.ContentRootPath}");
Console.WriteLine($"WebRootPath: {builder.Environment.WebRootPath}");
var app = builder.Build();
WebApplication.CreateBuilder initialise une nouvelle instance de la classe WebApplicationBuilder avec les valeurs par défaut préconfigurées.
Pour plus d’informations, consultez Vue d’ensemble des principes de base d’ASP.NET Core
Modifier la racine du contenu, le nom de l’application et l’environnement avec des variables d’environnement ou la ligne de commande
Le tableau suivant montre la variable d’environnement et l’argument de ligne de commande utilisés pour modifier la racine du contenu, le nom de l’application et l’environnement :
fonctionnalité | Variable d’environnement | Argument de ligne de commande |
---|---|---|
Nom de l'application | ASPNETCORE_APPLICATIONNAME | --applicationName |
Nom de l’environnement | ASPNETCORE_ENVIRONMENT | --environment |
Racine de contenu | ASPNETCORE_CONTENTROOT | --contentRoot |
Ajouter des fournisseurs de configuration
L’exemple suivant ajoute le fournisseur de configuration INI :
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddIniFile("appsettings.ini");
var app = builder.Build();
Pour plus d’informations, consultez Fournisseurs de configuration de fichiers dans Configuration dans ASP.NET Core.
Configuration de lecture
Par défaut, WebApplicationBuilder lit la configuration à partir de plusieurs sources, notamment :
appSettings.json
etappSettings.{environment}.json
- Variables d’environnement
- Ligne de commande
Pour obtenir la liste complète des sources de configuration lues, consultez Configuration par défaut dans Configuration dans ASP.NET Core.
Le code suivant lit HelloKey
à partir de la configuration et affiche la valeur au niveau du point de terminaison /
. Si la valeur de configuration est null, « Hello » est affecté à message
:
var builder = WebApplication.CreateBuilder(args);
var message = builder.Configuration["HelloKey"] ?? "Hello";
var app = builder.Build();
app.MapGet("/", () => message);
app.Run();
Lire l’environnement
var builder = WebApplication.CreateBuilder(args);
if (builder.Environment.IsDevelopment())
{
Console.WriteLine($"Running in development.");
}
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Ajouter des fournisseurs de journalisation
var builder = WebApplication.CreateBuilder(args);
// Configure JSON logging to the console.
builder.Logging.AddJsonConsole();
var app = builder.Build();
app.MapGet("/", () => "Hello JSON console!");
app.Run();
Ajouter des services
var builder = WebApplication.CreateBuilder(args);
// Add the memory cache services.
builder.Services.AddMemoryCache();
// Add a custom scoped service.
builder.Services.AddScoped<ITodoRepository, TodoRepository>();
var app = builder.Build();
Personnaliser IHostBuilder
Les méthodes d’extension existantes sur IHostBuilder sont accessibles à l’aide de la propriété Host :
var builder = WebApplication.CreateBuilder(args);
// Wait 30 seconds for graceful shutdown.
builder.Host.ConfigureHostOptions(o => o.ShutdownTimeout = TimeSpan.FromSeconds(30));
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Personnaliser IWebHostBuilder
Les méthodes d’extension sur IWebHostBuilder sont accessibles à l’aide de la propriété WebApplicationBuilder.WebHost.
var builder = WebApplication.CreateBuilder(args);
// Change the HTTP server implemenation to be HTTP.sys based
builder.WebHost.UseHttpSys();
var app = builder.Build();
app.MapGet("/", () => "Hello HTTP.sys");
app.Run();
Modifier la racine web
Par défaut, la racine web est relative à la racine de contenu dans le dossier wwwroot
. La racine web est l’endroit où l’intergiciel de fichiers statiques recherche les fichiers statiques. La racine web peut être modifiée avec WebHostOptions
, la ligne de commande ou avec la méthode UseWebRoot :
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
Args = args,
// Look for static files in webroot
WebRootPath = "webroot"
});
var app = builder.Build();
app.Run();
Conteneur d’injection de dépendances (DI) personnalisé
L’exemple suivant utilise Autofac :
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
// Register services directly with Autofac here. Don't
// call builder.Populate(), that happens in AutofacServiceProviderFactory.
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new MyApplicationModule()));
var app = builder.Build();
Ajouter un intergiciel
Tout intergiciel ASP.NET Core existant peut être configuré sur WebApplication
:
var app = WebApplication.Create(args);
// Setup the file server to serve static files.
app.UseFileServer();
app.MapGet("/", () => "Hello World!");
app.Run();
Pour plus d’informations, consultez Intergiciel (middleware) ASP.NET Core
Page d’exceptions du développeur
WebApplication.CreateBuilder initialise une nouvelle instance de la classe WebApplicationBuilder avec les valeurs par défaut préconfigurées. La page d’exception du développeur est activée dans les valeurs par défaut préconfigurées. Lorsque le code suivant est exécuté dans l’environnement de développement, la navigation vers /
présente une page conviviale qui affiche l’exception.
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () =>
{
throw new InvalidOperationException("Oops, the '/' route has thrown an exception.");
});
app.Run();