Megosztás a következőn keresztül:


WebApplication és WebApplicationBuilder minimális API-alkalmazásokban

Note

Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.

Warning

A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .

WebApplication

A következő kódot egy ASP.NET Core-sablon hozza létre:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Az előző kód a parancssori dotnet new web vagy a Visual Studio Üres websablonjának kiválasztásával hozható létre.

A következő kód létrehoz egy WebApplication (app) anélkül, hogy explicit módon létrehoz egy WebApplicationBuilder:

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run();

WebApplication.Create inicializálja a WebApplication osztály új példányát előre konfigurált alapértelmezett értékekkel.

WebApplication bizonyos feltételektől függően automatikusan hozzáadja a következő köztes szoftvereket a Minimal API-alkalmazásokhoz :

  • Először hozzáadódik a UseDeveloperExceptionPage, amikor a HostingEnvironment"Development".
  • UseRouting másodikként kerül hozzáadásra, ha a felhasználói kód még nem hívta meg a UseRouting-et, és ha vannak konfigurált végpontok, például app.MapGet.
  • UseEndpoints a köztesréteg-folyamatok végéhez kerül hozzáadásra, ha bármelyik végpont konfigurálva van.
  • UseAuthentication azonnal hozzáadódik UseRouting után, ha a felhasználói kód még nem hívta meg UseAuthentication-t, és ha a IAuthenticationSchemeProvider észlelhető a szolgáltatónál. IAuthenticationSchemeProvider alapértelmezés szerint AddAuthenticationhasználatakor lesz hozzáadva, a szolgáltatások pedig IServiceProviderIsServicehasználatával észlelhetők.
  • UseAuthorization akkor lesz a következő, ha a felhasználói kód még nem hívta fel UseAuthorization, és IAuthorizationHandlerProvider észlelhető-e a szolgáltatóban. IAuthorizationHandlerProvider alapértelmezés szerint AddAuthorizationhasználatakor lesz hozzáadva, a szolgáltatások pedig IServiceProviderIsServicehasználatával észlelhetők.
  • A felhasználó által konfigurált köztes szoftver és végpontok UseRouting és UseEndpointsközé kerülnek.

Az alkalmazáshoz hozzáadott automatikus köztes szoftver gyakorlatilag a következő kódot eredményezi:

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 => {});

Bizonyos esetekben az alapértelmezett köztes szoftverkonfiguráció nem megfelelő az alkalmazáshoz, és módosítást igényel. Például a UseCors-t UseAuthentication és UseAuthorizationelőtt kell meghívni. Az alkalmazásnak meg kell hívnia UseAuthentication és UseAuthorization, ha UseCors van meghívva:

app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

Ha a köztes szoftvereket az útvonalegyeztetés előtt kell futtatni, UseRouting kell meghívni, és a köztes szoftvernek a UseRoutinghívása előtt kell lennie. ebben az esetben nem szükséges UseEndpoints, mivel a korábban ismertetett módon automatikusan hozzáadja:

app.Use((context, next) =>
{
    return next(context);
});

app.UseRouting();

// other middleware and endpoints

Terminál köztes szoftver hozzáadásakor:

  • A köztes szoftvert UseEndpointsután kell hozzáadni.
  • Az alkalmazásnak meg kell hívnia UseRouting és UseEndpoints, hogy a terminál közbenső szoftvere a megfelelő helyre kerüljön.
app.UseRouting();

app.MapGet("/", () => "hello world");

app.UseEndpoints(e => {});

app.Run(context =>
{
    context.Response.StatusCode = 404;
    return Task.CompletedTask;
});

A terminál köztes szoftver olyan köztes szoftver, amely akkor fut, ha egyetlen végpont sem kezeli a kérést.

Portok használata

Amikor webalkalmazást hoz létre a Visual Studióval vagy dotnet new, létrejön egy Properties/launchSettings.json fájl, amely meghatározza azokat a portokat, amelyekre az alkalmazás válaszol. Az alábbi portbeállítási mintákban az alkalmazás Visual Studióból való futtatása hibaüzenetet ad vissza Unable to connect to web server 'AppName'. A Visual Studio hibát ad vissza, mert a Properties/launchSettings.jsonmegadott portot várja, de az alkalmazás a app.Run("http://localhost:3000")által megadott portot használja. Futtassa a következő portmódosítási mintákat a parancssorból.

Az alábbi szakaszok azt a portot állítják be, amelyekre az alkalmazás válaszol.

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run("http://localhost:3000");

Az előző kódban az alkalmazás reagál a 3000porton.

Több port

Az alábbi kódban az alkalmazás válaszol a port 3000 és 4000.

var app = WebApplication.Create(args);

app.Urls.Add("http://localhost:3000");
app.Urls.Add("http://localhost:4000");

app.MapGet("/", () => "Hello World");

app.Run();

A port beállítása a parancssorból

Az alábbi parancs lehetővé teszi, hogy az alkalmazás a 7777porton fogadjon.

dotnet run --urls="https://localhost:7777"

Ha a Kestrel végpont is konfigurálva van a appsettings.json fájlban, a appsettings.json megadott URL-címet használja a rendszer. További információért lásd: Kestrel végpont konfiguráció

A port beolvasása a környezetből

A következő kód beolvassa a portot a környezetből:

var app = WebApplication.Create(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "3000";

app.MapGet("/", () => "Hello World");

app.Run($"http://localhost:{port}");

A port környezetből való beállításának elsődleges módja a ASPNETCORE_URLS környezeti változó használata, amely az alábbi szakaszban látható.

Portok beállítása a ASPNETCORE_URLS környezeti változón keresztül

A port beállításához elérhető a ASPNETCORE_URLS környezeti változó:

ASPNETCORE_URLS=http://localhost:3000

ASPNETCORE_URLS több URL-címet is támogat:

ASPNETCORE_URLS=http://localhost:3000;https://localhost:5000

További információ a környezet használatáról: ASP.NET Core futtatókörnyezetek

Figyelés az összes felületen

Az alábbi minták azt mutatják be, hogy az összes felületen figyelnek

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();

Hallgatás minden felületen az ASPNETCORE_URLS használatával

Az előző minták használhatják a ASPNETCORE_URLS-t.

ASPNETCORE_URLS=http://*:3000;https://+:5000;http://0.0.0.0:5005

HTTPS beállítása fejlesztési tanúsítvánnyal

var app = WebApplication.Create(args);

app.Urls.Add("https://localhost:3000");

app.MapGet("/", () => "Hello World");

app.Run();

A fejlesztési tanúsítvánnyal kapcsolatos további információkért lásd: Az ASP.NET Core HTTPS fejlesztési tanúsítvány hitelesítése Windows és macOS.

HTTPS megadása egyéni tanúsítvány használatával

Az alábbi szakaszok bemutatják, hogyan adhatja meg az egyéni tanúsítványt a appsettings.json fájllal és konfigurációval.

Adja meg a testreszabott tanúsítványt a appsettings.json jelöléssel

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "cert.pem",
        "KeyPath": "key.pem"
      }
    }
  }
}

Az egyéni tanúsítvány megadása konfigurációval

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();

A tanúsítvány API-k használata

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

A következő kód a konfigurációs rendszerből olvas be:

var app = WebApplication.Create(args);

var message = app.Configuration["HelloKey"] ?? "Config failed!";

app.MapGet("/", () => message);

app.Run();

Lásd a(z) ASP.NET Core konfigurációt a további információkért.

Logging

Az alábbi kód egy üzenetet ír az alkalmazás indítási naplójába:

var app = WebApplication.Create(args);

app.Logger.LogInformation("The app started");

app.MapGet("/", () => "Hello World");

app.Run();

További információ: Naplózás a .NET-ben és a ASP.NET Core-ban

A függőség-injektálás (DI) konténer elérése

Az alábbi kód bemutatja, hogyan kérhet le szolgáltatásokat a DI-tárolóból az alkalmazás indításakor:


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();

További információért lásd: Függőséginjektálás az ASP.NET Core-ban.

WebApplicationBuilder

Ez a szakasz WebApplicationBuilderhasználatával tartalmaz mintakódot.

A tartalomgyöker, az alkalmazásnév és a környezet módosítása

A következő kód állítja be a tartalom gyökerét, az alkalmazás nevét és a környezetet:

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 inicializálja a WebApplicationBuilder osztály új példányát előre konfigurált alapértelmezett beállításokkal.

További információ: ASP.NET Alapvető alapismeretek áttekintése

A tartalomgyöker, az alkalmazásnév és a környezet módosítása környezeti változók vagy parancssor szerint

Az alábbi táblázat a tartalomgyöker, az alkalmazásnév és a környezet módosításához használt környezeti változót és parancssori argumentumot mutatja be:

funkció Környezet változó Parancssori argumentum
Alkalmazás neve ASPNETCORE_APPLICATIONNAME --applicationName
Környezet neve ASPNETCORE_ENVIRONMENT --environment
Tartalomgyökér ASPNETCORE_CONTENTROOT --contentRoot

Konfigurációszolgáltatók hozzáadása

Az alábbi minta hozzáadja az INI-konfigurációszolgáltatót:

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddIniFile("appsettings.ini");

var app = builder.Build();

Részletes információért lásd: Fájlkonfigurációs szolgáltatók az ASP.NET Core konfigurációjában.

Olvasási konfiguráció

Alapértelmezés szerint a WebApplicationBuilder több forrásból olvassa be a konfigurációt, beleértve a következőket:

  • appSettings.json és appSettings.{environment}.json
  • Környezeti változók
  • A parancssor

Az alábbi kód beolvassa HelloKey konfigurációból, és megjeleníti az értéket a / végponton. Ha a konfiguráció értéke null, a "Hello" messagevan hozzárendelve:

var builder = WebApplication.CreateBuilder(args);

var message = builder.Configuration["HelloKey"] ?? "Hello";

var app = builder.Build();

app.MapGet("/", () => message);

app.Run();

A konfigurációs források teljes listáját az Alapértelmezett konfiguráció szakaszban találja az ASP.NET Core konfiguráció című dokumentumban.

Naplózási szolgáltatók hozzáadása

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();

Szolgáltatások hozzáadása

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();

Az IHostBuilder testreszabása

A IHostBuilder meglévő bővítési metódusok a Gazdagép tulajdonsághasználatával érhetők el.

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();

Az IWebHostBuilder testreszabása

A IWebHostBuilder bővítménymetelyek a WebApplicationBuilder.WebHost tulajdonság használatával érhetők el.

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();

Webes gyökér módosítása

Alapértelmezés szerint a webes gyökér a wwwroot mappában lévő tartalomgyökerhez képest van. A webes gyökér az, ahol a Statikus fájl köztes szoftver statikus fájlokat keres. A webes gyökér a WebHostOptions, a parancssor vagy a UseWebRoot metódus használatával módosítható:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    Args = args,
    // Look for static files in webroot
    WebRootPath = "webroot"
});

var app = builder.Build();

app.Run();

Egyéni függőséginjektáló (DI) tároló

Az alábbi példa Autofachasznál:

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();

Köztes szoftver hozzáadása

Bármely meglévő ASP.NET Core middleware konfigurálható a WebApplication:

var app = WebApplication.Create(args);

// Setup the file server to serve static files.
app.UseFileServer();

app.MapGet("/", () => "Hello World!");

app.Run();

További információ: ASP.NET Core Middleware

Fejlesztői kivételoldal

WebApplication.CreateBuilder inicializálja a WebApplicationBuilder osztály új példányát előre konfigurált alapértelmezett értékekkel. A fejlesztői kivételoldal engedélyezve van az előre konfigurált alapértelmezett beállításokban. Ha a következő kódot a fejlesztési környezetben futtatja, a / navigálással egy barátságos oldal jelenik meg, ami megmutatja a kivételt.

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/", () =>
{
    throw new InvalidOperationException("Oops, the '/' route has thrown an exception.");
});

app.Run();

WebApplication

A következő kódot egy ASP.NET Core-sablon hozza létre:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Az előző kód a parancssori dotnet new web vagy a Visual Studio Üres websablonjának kiválasztásával hozható létre.

A következő kód létrehoz egy WebApplication (app) anélkül, hogy explicit módon létrehoz egy WebApplicationBuilder:

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run();

WebApplication.Create inicializálja a WebApplication osztály új példányát előre konfigurált alapértelmezett értékekkel.

WebApplication bizonyos feltételektől függően automatikusan hozzáadja a következő köztes szoftvereket a Minimal API-alkalmazásokhoz :

  • Először hozzáadódik a UseDeveloperExceptionPage, amikor a HostingEnvironment"Development".
  • UseRouting másodikként kerül hozzáadásra, ha a felhasználói kód még nem hívta meg a UseRouting-et, és ha vannak konfigurált végpontok, például app.MapGet.
  • UseEndpoints a köztesréteg-folyamatok végéhez kerül hozzáadásra, ha bármelyik végpont konfigurálva van.
  • UseAuthentication azonnal hozzáadódik UseRouting után, ha a felhasználói kód még nem hívta meg UseAuthentication-t, és ha a IAuthenticationSchemeProvider észlelhető a szolgáltatónál. IAuthenticationSchemeProvider alapértelmezés szerint AddAuthenticationhasználatakor lesz hozzáadva, a szolgáltatások pedig IServiceProviderIsServicehasználatával észlelhetők.
  • UseAuthorization akkor lesz a következő, ha a felhasználói kód még nem hívta fel UseAuthorization, és IAuthorizationHandlerProvider észlelhető-e a szolgáltatóban. IAuthorizationHandlerProvider alapértelmezés szerint AddAuthorizationhasználatakor lesz hozzáadva, a szolgáltatások pedig IServiceProviderIsServicehasználatával észlelhetők.
  • A felhasználó által konfigurált köztes szoftver és végpontok UseRouting és UseEndpointsközé kerülnek.

Az alkalmazáshoz hozzáadott automatikus köztes szoftver gyakorlatilag a következő kódot eredményezi:

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 => {});

Bizonyos esetekben az alapértelmezett köztes szoftverkonfiguráció nem megfelelő az alkalmazáshoz, és módosítást igényel. Például a UseCors-t UseAuthentication és UseAuthorizationelőtt kell meghívni. Az alkalmazásnak meg kell hívnia UseAuthentication és UseAuthorization, ha UseCors van meghívva:

app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

Ha a köztes szoftvereket az útvonalegyeztetés előtt kell futtatni, UseRouting kell meghívni, és a köztes szoftvernek a UseRoutinghívása előtt kell lennie. ebben az esetben nem szükséges UseEndpoints, mivel a korábban ismertetett módon automatikusan hozzáadja:

app.Use((context, next) =>
{
    return next(context);
});

app.UseRouting();

// other middleware and endpoints

Terminál köztes szoftver hozzáadásakor:

  • A köztes szoftvert UseEndpointsután kell hozzáadni.
  • Az alkalmazásnak meg kell hívnia UseRouting és UseEndpoints, hogy a terminál közbenső szoftvere a megfelelő helyre kerüljön.
app.UseRouting();

app.MapGet("/", () => "hello world");

app.UseEndpoints(e => {});

app.Run(context =>
{
    context.Response.StatusCode = 404;
    return Task.CompletedTask;
});

A terminál köztes szoftver olyan köztes szoftver, amely akkor fut, ha egyetlen végpont sem kezeli a kérést.

Portok használata

Amikor webalkalmazást hoz létre a Visual Studióval vagy dotnet new, létrejön egy Properties/launchSettings.json fájl, amely meghatározza azokat a portokat, amelyekre az alkalmazás válaszol. Az alábbi portbeállítási mintákban az alkalmazás Visual Studióból való futtatása hibaüzenetet ad vissza Unable to connect to web server 'AppName'. A Visual Studio hibát ad vissza, mert a Properties/launchSettings.jsonmegadott portot várja, de az alkalmazás a app.Run("http://localhost:3000")által megadott portot használja. Futtassa a következő portmódosítási mintákat a parancssorból.

Az alábbi szakaszok azt a portot állítják be, amelyekre az alkalmazás válaszol.

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run("http://localhost:3000");

Az előző kódban az alkalmazás reagál a 3000porton.

Több port

Az alábbi kódban az alkalmazás válaszol a port 3000 és 4000.

var app = WebApplication.Create(args);

app.Urls.Add("http://localhost:3000");
app.Urls.Add("http://localhost:4000");

app.MapGet("/", () => "Hello World");

app.Run();

A port beállítása a parancssorból

Az alábbi parancs lehetővé teszi, hogy az alkalmazás a 7777porton fogadjon.

dotnet run --urls="https://localhost:7777"

Ha a Kestrel végpont is konfigurálva van a appsettings.json fájlban, a appsettings.json megadott URL-címet használja a rendszer. További információért lásd: Kestrel végpont konfiguráció

A port beolvasása a környezetből

A következő kód beolvassa a portot a környezetből:

var app = WebApplication.Create(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "3000";

app.MapGet("/", () => "Hello World");

app.Run($"http://localhost:{port}");

A port környezetből való beállításának elsődleges módja a ASPNETCORE_URLS környezeti változó használata, amely az alábbi szakaszban látható.

Portok beállítása a ASPNETCORE_URLS környezeti változón keresztül

A port beállításához elérhető a ASPNETCORE_URLS környezeti változó:

ASPNETCORE_URLS=http://localhost:3000

ASPNETCORE_URLS több URL-címet is támogat:

ASPNETCORE_URLS=http://localhost:3000;https://localhost:5000

Figyelés az összes felületen

Az alábbi minták azt mutatják be, hogy az összes felületen figyelnek

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();

Hallgatás minden felületen az ASPNETCORE_URLS használatával

Az előző minták használhatják a ASPNETCORE_URLS-t.

ASPNETCORE_URLS=http://*:3000;https://+:5000;http://0.0.0.0:5005

Figyeljen minden interfészen az ASPNETCORE_HTTPS_PORTS használatával

Az előző minták használhatják a ASPNETCORE_HTTPS_PORTS és ASPNETCORE_HTTP_PORTSkódokat.

ASPNETCORE_HTTP_PORTS=3000;5005
ASPNETCORE_HTTPS_PORTS=5000

További információ: Végpontok konfigurálása a ASP.NET Core Kestrel webkiszolgálóhoz

HTTPS beállítása fejlesztési tanúsítvánnyal

var app = WebApplication.Create(args);

app.Urls.Add("https://localhost:3000");

app.MapGet("/", () => "Hello World");

app.Run();

A fejlesztési tanúsítvánnyal kapcsolatos további információkért lásd: Az ASP.NET Core HTTPS fejlesztési tanúsítvány hitelesítése Windows és macOS.

HTTPS megadása egyéni tanúsítvány használatával

Az alábbi szakaszok bemutatják, hogyan adhatja meg az egyéni tanúsítványt a appsettings.json fájllal és konfigurációval.

Adja meg a testreszabott tanúsítványt a appsettings.json jelöléssel

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "cert.pem",
        "KeyPath": "key.pem"
      }
    }
  }
}

Az egyéni tanúsítvány megadása konfigurációval

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();

A tanúsítvány API-k használata

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();

A környezet olvasása

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();

További információ a környezet használatáról: ASP.NET Core futtatókörnyezetek

Configuration

A következő kód a konfigurációs rendszerből olvas be:

var app = WebApplication.Create(args);

var message = app.Configuration["HelloKey"] ?? "Config failed!";

app.MapGet("/", () => message);

app.Run();

Lásd a(z) ASP.NET Core konfigurációt a további információkért.

Logging

Az alábbi kód egy üzenetet ír az alkalmazás indítási naplójába:

var app = WebApplication.Create(args);

app.Logger.LogInformation("The app started");

app.MapGet("/", () => "Hello World");

app.Run();

További információ: Naplózás a .NET-ben és a ASP.NET Core-ban

A függőség-injektálás (DI) konténer elérése

Az alábbi kód bemutatja, hogyan kérhet le szolgáltatásokat a DI-tárolóból az alkalmazás indításakor:


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();

Az alábbi kód bemutatja, hogyan érheti el a kulcsokat a DI-tárolóból a [FromKeyedServices] attribútum használatával:

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.";
}

További információ a DI-ről a Függőséginjektálás az ASP.NET Corecímű részben található.

WebApplicationBuilder

Ez a szakasz WebApplicationBuilderhasználatával tartalmaz mintakódot.

A tartalomgyöker, az alkalmazásnév és a környezet módosítása

A következő kód állítja be a tartalom gyökerét, az alkalmazás nevét és a környezetet:

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 inicializálja a WebApplicationBuilder osztály új példányát előre konfigurált alapértelmezett beállításokkal.

További információ: ASP.NET Alapvető alapismeretek áttekintése

A tartalomgyöker, az alkalmazás neve és a környezet módosítása környezeti változók vagy parancssor használatával

Az alábbi táblázat a tartalomgyöker, az alkalmazásnév és a környezet módosításához használt környezeti változót és parancssori argumentumot mutatja be:

funkció Környezet változó Parancssori argumentum
Alkalmazás neve ASPNETCORE_APPLICATIONNAME --applicationName
Környezet neve ASPNETCORE_ENVIRONMENT --environment
Tartalomgyökér ASPNETCORE_CONTENTROOT --contentRoot

Konfigurációszolgáltatók hozzáadása

Az alábbi minta hozzáadja az INI-konfigurációszolgáltatót:

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddIniFile("appsettings.ini");

var app = builder.Build();

Részletes információért lásd: Fájlkonfigurációs szolgáltatók az ASP.NET Core konfigurációjában.

Olvasási konfiguráció

Alapértelmezés szerint a WebApplicationBuilder több forrásból olvassa be a konfigurációt, beleértve a következőket:

  • appSettings.json és appSettings.{environment}.json
  • Környezeti változók
  • A parancssor

A konfigurációs források teljes listáját a Alapértelmezett konfiguráció című részben találja, amely része a konfigurációnak az ASP.NET Coredokumentumban.

Az alábbi kód beolvassa HelloKey konfigurációból, és megjeleníti az értéket a / végponton. Ha a konfiguráció értéke null, a "Hello" messagevan hozzárendelve:

var builder = WebApplication.CreateBuilder(args);

var message = builder.Configuration["HelloKey"] ?? "Hello";

var app = builder.Build();

app.MapGet("/", () => message);

app.Run();

A környezet olvasása

var builder = WebApplication.CreateBuilder(args);

if (builder.Environment.IsDevelopment())
{
    Console.WriteLine($"Running in development.");
}

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Naplózási szolgáltatók hozzáadása

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();

Szolgáltatások hozzáadása

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();

Az IHostBuilder testreszabása

A IHostBuilder meglévő bővítési metódusok a Gazdagép tulajdonsághasználatával érhetők el.

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();

Az IWebHostBuilder testreszabása

A IWebHostBuilder bővítménymetelyek a WebApplicationBuilder.WebHost tulajdonság használatával érhetők el.

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();

Webes gyökér módosítása

Alapértelmezés szerint a webes gyökér a wwwroot mappában lévő tartalomgyökerhez képest van. A webes gyökér az, ahol a Statikus fájl köztes szoftver statikus fájlokat keres. A webes gyökér a WebHostOptions, a parancssor vagy a UseWebRoot metódus használatával módosítható:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    Args = args,
    // Look for static files in webroot
    WebRootPath = "webroot"
});

var app = builder.Build();

app.Run();

Egyéni függőséginjektáló (DI) tároló

Az alábbi példa Autofachasznál:

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();

Köztes szoftver hozzáadása

Bármely meglévő ASP.NET Core middleware konfigurálható a WebApplication:

var app = WebApplication.Create(args);

// Setup the file server to serve static files.
app.UseFileServer();

app.MapGet("/", () => "Hello World!");

app.Run();

További információ: ASP.NET Core Middleware

Fejlesztői kivételoldal

WebApplication.CreateBuilder inicializálja a WebApplicationBuilder osztály új példányát előre konfigurált alapértelmezett értékekkel. A fejlesztői kivételoldal engedélyezve van az előre konfigurált alapértelmezett beállításokban. Ha a következő kódot a fejlesztési környezetben futtatja, a / navigálással egy barátságos oldal jelenik meg, ami megmutatja a kivételt.

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/", () =>
{
    throw new InvalidOperationException("Oops, the '/' route has thrown an exception.");
});

app.Run();

WebApplication

A következő kódot egy ASP.NET Core-sablon hozza létre:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Az előző kód a parancssori dotnet new web vagy a Visual Studio Üres websablonjának kiválasztásával hozható létre.

A következő kód létrehoz egy WebApplication (app) anélkül, hogy explicit módon létrehoz egy WebApplicationBuilder:

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run();

WebApplication.Create inicializálja a WebApplication osztály új példányát előre konfigurált alapértelmezett értékekkel.

WebApplication bizonyos feltételektől függően automatikusan hozzáadja a következő köztes szoftvereket a Minimal API-alkalmazásokhoz :

  • Először hozzáadódik a UseDeveloperExceptionPage, amikor a HostingEnvironment"Development".
  • UseRouting másodikként kerül hozzáadásra, ha a felhasználói kód még nem hívta meg a UseRouting-et, és ha vannak konfigurált végpontok, például app.MapGet.
  • UseEndpoints a köztesréteg-folyamatok végéhez kerül hozzáadásra, ha bármelyik végpont konfigurálva van.
  • UseAuthentication azonnal hozzáadódik UseRouting után, ha a felhasználói kód még nem hívta meg UseAuthentication-t, és ha a IAuthenticationSchemeProvider észlelhető a szolgáltatónál. IAuthenticationSchemeProvider alapértelmezés szerint AddAuthenticationhasználatakor lesz hozzáadva, a szolgáltatások pedig IServiceProviderIsServicehasználatával észlelhetők.
  • UseAuthorization akkor lesz a következő, ha a felhasználói kód még nem hívta fel UseAuthorization, és IAuthorizationHandlerProvider észlelhető-e a szolgáltatóban. IAuthorizationHandlerProvider alapértelmezés szerint AddAuthorizationhasználatakor lesz hozzáadva, a szolgáltatások pedig IServiceProviderIsServicehasználatával észlelhetők.
  • A felhasználó által konfigurált köztes szoftver és végpontok UseRouting és UseEndpointsközé kerülnek.

Az alkalmazáshoz hozzáadott automatikus köztes szoftver gyakorlatilag a következő kódot eredményezi:

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 => {});

Bizonyos esetekben az alapértelmezett köztes szoftverkonfiguráció nem megfelelő az alkalmazáshoz, és módosítást igényel. Például a UseCors-t UseAuthentication és UseAuthorizationelőtt kell meghívni. Az alkalmazásnak meg kell hívnia UseAuthentication és UseAuthorization, ha UseCors van meghívva:

app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

Ha a köztes szoftvereket az útvonalegyeztetés előtt kell futtatni, UseRouting kell meghívni, és a köztes szoftvernek a UseRoutinghívása előtt kell lennie. ebben az esetben nem szükséges UseEndpoints, mivel a korábban ismertetett módon automatikusan hozzáadja:

app.Use((context, next) =>
{
    return next(context);
});

app.UseRouting();

// other middleware and endpoints

Terminál köztes szoftver hozzáadásakor:

  • A köztes szoftvert UseEndpointsután kell hozzáadni.
  • Az alkalmazásnak meg kell hívnia UseRouting és UseEndpoints, hogy a terminál közbenső szoftvere a megfelelő helyre kerüljön.
app.UseRouting();

app.MapGet("/", () => "hello world");

app.UseEndpoints(e => {});

app.Run(context =>
{
    context.Response.StatusCode = 404;
    return Task.CompletedTask;
});

A terminál köztes szoftver olyan köztes szoftver, amely akkor fut, ha egyetlen végpont sem kezeli a kérést.

Portok használata

Amikor webalkalmazást hoz létre a Visual Studióval vagy dotnet new, létrejön egy Properties/launchSettings.json fájl, amely meghatározza azokat a portokat, amelyekre az alkalmazás válaszol. Az alábbi portbeállítási mintákban az alkalmazás Visual Studióból való futtatása hibaüzenetet ad vissza Unable to connect to web server 'AppName'. A Visual Studio hibát ad vissza, mert a Properties/launchSettings.jsonmegadott portot várja, de az alkalmazás a app.Run("http://localhost:3000")által megadott portot használja. Futtassa a következő portmódosítási mintákat a parancssorból.

Az alábbi szakaszok azt a portot állítják be, amelyekre az alkalmazás válaszol.

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run("http://localhost:3000");

Az előző kódban az alkalmazás reagál a 3000porton.

Több port

Az alábbi kódban az alkalmazás válaszol a port 3000 és 4000.

var app = WebApplication.Create(args);

app.Urls.Add("http://localhost:3000");
app.Urls.Add("http://localhost:4000");

app.MapGet("/", () => "Hello World");

app.Run();

A port beállítása a parancssorból

Az alábbi parancs lehetővé teszi, hogy az alkalmazás a 7777porton fogadjon.

dotnet run --urls="https://localhost:7777"

Ha a Kestrel végpont is konfigurálva van a appsettings.json fájlban, a appsettings.json megadott URL-címet használja a rendszer. További információért lásd: Kestrel végpont konfiguráció

A port beolvasása a környezetből

A következő kód beolvassa a portot a környezetből:

var app = WebApplication.Create(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "3000";

app.MapGet("/", () => "Hello World");

app.Run($"http://localhost:{port}");

A port környezetből való beállításának elsődleges módja a ASPNETCORE_URLS környezeti változó használata, amely az alábbi szakaszban látható.

Portok beállítása a ASPNETCORE_URLS környezeti változón keresztül

A port beállításához elérhető a ASPNETCORE_URLS környezeti változó:

ASPNETCORE_URLS=http://localhost:3000

ASPNETCORE_URLS több URL-címet is támogat:

ASPNETCORE_URLS=http://localhost:3000;https://localhost:5000

Figyelés az összes felületen

Az alábbi minták azt mutatják be, hogy az összes felületen figyelnek

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();

Hallgatás minden felületen az ASPNETCORE_URLS használatával

Az előző minták használhatják a ASPNETCORE_URLS-t.

ASPNETCORE_URLS=http://*:3000;https://+:5000;http://0.0.0.0:5005

Figyeljen minden interfészen az ASPNETCORE_HTTPS_PORTS használatával

Az előző minták használhatják a ASPNETCORE_HTTPS_PORTS és ASPNETCORE_HTTP_PORTSkódokat.

ASPNETCORE_HTTP_PORTS=3000;5005
ASPNETCORE_HTTPS_PORTS=5000

További információ: Végpontok konfigurálása a ASP.NET Core Kestrel webkiszolgálóhoz

HTTPS beállítása fejlesztési tanúsítvánnyal

var app = WebApplication.Create(args);

app.Urls.Add("https://localhost:3000");

app.MapGet("/", () => "Hello World");

app.Run();

A fejlesztési tanúsítvánnyal kapcsolatos további információkért lásd: Az ASP.NET Core HTTPS fejlesztési tanúsítvány hitelesítése Windows és macOS.

HTTPS megadása egyéni tanúsítvány használatával

Az alábbi szakaszok bemutatják, hogyan adhatja meg az egyéni tanúsítványt a appsettings.json fájllal és konfigurációval.

Adja meg a testreszabott tanúsítványt a appsettings.json jelöléssel

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "cert.pem",
        "KeyPath": "key.pem"
      }
    }
  }
}

Az egyéni tanúsítvány megadása konfigurációval

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();

A tanúsítvány API-k használata

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();

A környezet olvasása

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();

További információ a környezet használatáról: ASP.NET Core futtatókörnyezetek

Configuration

A következő kód a konfigurációs rendszerből olvas be:

var app = WebApplication.Create(args);

var message = app.Configuration["HelloKey"] ?? "Config failed!";

app.MapGet("/", () => message);

app.Run();

Lásd a(z) ASP.NET Core konfigurációt a további információkért.

Logging

Az alábbi kód egy üzenetet ír az alkalmazás indítási naplójába:

var app = WebApplication.Create(args);

app.Logger.LogInformation("The app started");

app.MapGet("/", () => "Hello World");

app.Run();

További információ: Naplózás a .NET-ben és a ASP.NET Core-ban

A függőség-injektálás (DI) konténer elérése

Az alábbi kód bemutatja, hogyan kérhet le szolgáltatásokat a DI-tárolóból az alkalmazás indításakor:


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();

Az alábbi kód bemutatja, hogyan érheti el a kulcsokat a DI-tárolóból a [FromKeyedServices] attribútum használatával:

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.";
}

További információ a DI-ről a Függőséginjektálás az ASP.NET Corecímű részben található.

WebApplicationBuilder

Ez a szakasz WebApplicationBuilderhasználatával tartalmaz mintakódot.

A tartalomgyöker, az alkalmazásnév és a környezet módosítása

A következő kód állítja be a tartalom gyökerét, az alkalmazás nevét és a környezetet:

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 inicializálja a WebApplicationBuilder osztály új példányát előre konfigurált alapértelmezett beállításokkal.

További információ: ASP.NET Alapvető alapismeretek áttekintése

A tartalomgyöker, az alkalmazás neve és a környezet módosítása környezeti változók vagy parancssor használatával

Az alábbi táblázat a tartalomgyöker, az alkalmazásnév és a környezet módosításához használt környezeti változót és parancssori argumentumot mutatja be:

funkció Környezet változó Parancssori argumentum
Alkalmazás neve ASPNETCORE_APPLICATIONNAME --applicationName
Környezet neve ASPNETCORE_ENVIRONMENT --environment
Tartalomgyökér ASPNETCORE_CONTENTROOT --contentRoot

Konfigurációszolgáltatók hozzáadása

Az alábbi minta hozzáadja az INI-konfigurációszolgáltatót:

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddIniFile("appsettings.ini");

var app = builder.Build();

Részletes információért lásd: Fájlkonfigurációs szolgáltatók az ASP.NET Core konfigurációjában.

Olvasási konfiguráció

Alapértelmezés szerint a WebApplicationBuilder több forrásból olvassa be a konfigurációt, beleértve a következőket:

  • appSettings.json és appSettings.{environment}.json
  • Környezeti változók
  • A parancssor

A konfigurációs források teljes listáját a Alapértelmezett konfiguráció című részben találja, amely része a konfigurációnak az ASP.NET Coredokumentumban.

Az alábbi kód beolvassa HelloKey konfigurációból, és megjeleníti az értéket a / végponton. Ha a konfiguráció értéke null, a "Hello" messagevan hozzárendelve:

var builder = WebApplication.CreateBuilder(args);

var message = builder.Configuration["HelloKey"] ?? "Hello";

var app = builder.Build();

app.MapGet("/", () => message);

app.Run();

A környezet olvasása

var builder = WebApplication.CreateBuilder(args);

if (builder.Environment.IsDevelopment())
{
    Console.WriteLine($"Running in development.");
}

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Naplózási szolgáltatók hozzáadása

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();

Szolgáltatások hozzáadása

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();

Az IHostBuilder testreszabása

A IHostBuilder meglévő bővítési metódusok a Gazdagép tulajdonsághasználatával érhetők el.

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();

Az IWebHostBuilder testreszabása

A IWebHostBuilder bővítménymetelyek a WebApplicationBuilder.WebHost tulajdonság használatával érhetők el.

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();

Webes gyökér módosítása

Alapértelmezés szerint a webes gyökér a wwwroot mappában lévő tartalomgyökerhez képest van. A webes gyökér az, ahol a Statikus fájl köztes szoftver statikus fájlokat keres. A webes gyökér a WebHostOptions, a parancssor vagy a UseWebRoot metódus használatával módosítható:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    Args = args,
    // Look for static files in webroot
    WebRootPath = "webroot"
});

var app = builder.Build();

app.Run();

Egyéni függőséginjektáló (DI) tároló

Az alábbi példa Autofachasznál:

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();

Köztes szoftver hozzáadása

Bármely meglévő ASP.NET Core middleware konfigurálható a WebApplication:

var app = WebApplication.Create(args);

// Setup the file server to serve static files.
app.UseFileServer();

app.MapGet("/", () => "Hello World!");

app.Run();

További információ: ASP.NET Core Middleware

Fejlesztői kivételoldal

WebApplication.CreateBuilder inicializálja a WebApplicationBuilder osztály új példányát előre konfigurált alapértelmezett értékekkel. A fejlesztői kivételoldal engedélyezve van az előre konfigurált alapértelmezett beállításokban. Ha a következő kódot a fejlesztési környezetben futtatja, a / navigálással egy barátságos oldal jelenik meg, ami megmutatja a kivételt.

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/", () =>
{
    throw new InvalidOperationException("Oops, the '/' route has thrown an exception.");
});

app.Run();

WebApplication

A következő kódot egy ASP.NET Core-sablon hozza létre:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Az előző kód a parancssori dotnet new web vagy a Visual Studio Üres websablonjának kiválasztásával hozható létre.

A következő kód létrehoz egy WebApplication (app) anélkül, hogy explicit módon létrehoz egy WebApplicationBuilder:

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run();

WebApplication.Create inicializálja a WebApplication osztály új példányát előre konfigurált alapértelmezett értékekkel.

WebApplication bizonyos feltételektől függően automatikusan hozzáadja a következő köztes szoftvereket a Minimal API-alkalmazásokhoz :

  • Először hozzáadódik a UseDeveloperExceptionPage, amikor a HostingEnvironment"Development".
  • UseRouting másodikként kerül hozzáadásra, ha a felhasználói kód még nem hívta meg a UseRouting-et, és ha vannak konfigurált végpontok, például app.MapGet.
  • UseEndpoints a köztesréteg-folyamatok végéhez kerül hozzáadásra, ha bármelyik végpont konfigurálva van.
  • UseAuthentication azonnal hozzáadódik UseRouting után, ha a felhasználói kód még nem hívta meg UseAuthentication-t, és ha a IAuthenticationSchemeProvider észlelhető a szolgáltatónál. IAuthenticationSchemeProvider alapértelmezés szerint AddAuthenticationhasználatakor lesz hozzáadva, a szolgáltatások pedig IServiceProviderIsServicehasználatával észlelhetők.
  • UseAuthorization akkor lesz a következő, ha a felhasználói kód még nem hívta fel UseAuthorization, és IAuthorizationHandlerProvider észlelhető-e a szolgáltatóban. IAuthorizationHandlerProvider alapértelmezés szerint AddAuthorizationhasználatakor lesz hozzáadva, a szolgáltatások pedig IServiceProviderIsServicehasználatával észlelhetők.
  • A felhasználó által konfigurált köztes szoftver és végpontok UseRouting és UseEndpointsközé kerülnek.

Az alkalmazáshoz hozzáadott automatikus köztes szoftver gyakorlatilag a következő kódot eredményezi:

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 => {});

Bizonyos esetekben az alapértelmezett köztes szoftverkonfiguráció nem megfelelő az alkalmazáshoz, és módosítást igényel. Például a UseCors-t UseAuthentication és UseAuthorizationelőtt kell meghívni. Az alkalmazásnak meg kell hívnia UseAuthentication és UseAuthorization, ha UseCors van meghívva:

app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

Ha a köztes szoftvereket az útvonalegyeztetés előtt kell futtatni, UseRouting kell meghívni, és a köztes szoftvernek a UseRoutinghívása előtt kell lennie. ebben az esetben nem szükséges UseEndpoints, mivel a korábban ismertetett módon automatikusan hozzáadja:

app.Use((context, next) =>
{
    return next(context);
});

app.UseRouting();

// other middleware and endpoints

Terminál köztes szoftver hozzáadásakor:

  • A köztes szoftvert UseEndpointsután kell hozzáadni.
  • Az alkalmazásnak meg kell hívnia UseRouting és UseEndpoints, hogy a terminál közbenső szoftvere a megfelelő helyre kerüljön.
app.UseRouting();

app.MapGet("/", () => "hello world");

app.UseEndpoints(e => {});

app.Run(context =>
{
    context.Response.StatusCode = 404;
    return Task.CompletedTask;
});

A terminál köztes szoftver olyan köztes szoftver, amely akkor fut, ha egyetlen végpont sem kezeli a kérést.

Portok használata

Amikor webalkalmazást hoz létre a Visual Studióval vagy dotnet new, létrejön egy Properties/launchSettings.json fájl, amely meghatározza azokat a portokat, amelyekre az alkalmazás válaszol. Az alábbi portbeállítási mintákban az alkalmazás Visual Studióból való futtatása hibaüzenetet ad vissza Unable to connect to web server 'AppName'. A Visual Studio hibát ad vissza, mert a Properties/launchSettings.jsonmegadott portot várja, de az alkalmazás a app.Run("http://localhost:3000")által megadott portot használja. Futtassa a következő portmódosítási mintákat a parancssorból.

Az alábbi szakaszok azt a portot állítják be, amelyekre az alkalmazás válaszol.

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run("http://localhost:3000");

Az előző kódban az alkalmazás reagál a 3000porton.

Több port

Az alábbi kódban az alkalmazás válaszol a port 3000 és 4000.

var app = WebApplication.Create(args);

app.Urls.Add("http://localhost:3000");
app.Urls.Add("http://localhost:4000");

app.MapGet("/", () => "Hello World");

app.Run();

A port beállítása a parancssorból

Az alábbi parancs lehetővé teszi, hogy az alkalmazás a 7777porton fogadjon.

dotnet run --urls="https://localhost:7777"

Ha a Kestrel végpont is konfigurálva van a appsettings.json fájlban, a appsettings.json megadott URL-címet használja a rendszer. További információért lásd: Kestrel végpont konfiguráció

A port beolvasása a környezetből

A következő kód beolvassa a portot a környezetből:

var app = WebApplication.Create(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "3000";

app.MapGet("/", () => "Hello World");

app.Run($"http://localhost:{port}");

A port környezetből való beállításának elsődleges módja a ASPNETCORE_URLS környezeti változó használata, amely az alábbi szakaszban látható.

Portok beállítása a ASPNETCORE_URLS környezeti változón keresztül

A port beállításához elérhető a ASPNETCORE_URLS környezeti változó:

ASPNETCORE_URLS=http://localhost:3000

ASPNETCORE_URLS több URL-címet is támogat:

ASPNETCORE_URLS=http://localhost:3000;https://localhost:5000

Figyelés az összes felületen

Az alábbi minták azt mutatják be, hogy az összes felületen figyelnek

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();

Hallgatás minden felületen az ASPNETCORE_URLS használatával

Az előző minták használhatják a ASPNETCORE_URLS-t.

ASPNETCORE_URLS=http://*:3000;https://+:5000;http://0.0.0.0:5005

Figyeljen minden interfészen az ASPNETCORE_HTTPS_PORTS használatával

Az előző minták használhatják a ASPNETCORE_HTTPS_PORTS és ASPNETCORE_HTTP_PORTSkódokat.

ASPNETCORE_HTTP_PORTS=3000;5005
ASPNETCORE_HTTPS_PORTS=5000

További információ: Végpontok konfigurálása a ASP.NET Core Kestrel webkiszolgálóhoz

HTTPS beállítása fejlesztési tanúsítvánnyal

var app = WebApplication.Create(args);

app.Urls.Add("https://localhost:3000");

app.MapGet("/", () => "Hello World");

app.Run();

A fejlesztési tanúsítvánnyal kapcsolatos további információkért lásd: Az ASP.NET Core HTTPS fejlesztési tanúsítvány hitelesítése Windows és macOS.

HTTPS megadása egyéni tanúsítvány használatával

Az alábbi szakaszok bemutatják, hogyan adhatja meg az egyéni tanúsítványt a appsettings.json fájllal és konfigurációval.

Adja meg a testreszabott tanúsítványt a appsettings.json jelöléssel

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "cert.pem",
        "KeyPath": "key.pem"
      }
    }
  }
}

Az egyéni tanúsítvány megadása konfigurációval

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();

A tanúsítvány API-k használata

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();

A környezet olvasása

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();

További információ a környezet használatáról: ASP.NET Core futtatókörnyezetek

Configuration

A következő kód a konfigurációs rendszerből olvas be:

var app = WebApplication.Create(args);

var message = app.Configuration["HelloKey"] ?? "Config failed!";

app.MapGet("/", () => message);

app.Run();

Lásd a(z) ASP.NET Core konfigurációt a további információkért.

Logging

Az alábbi kód egy üzenetet ír az alkalmazás indítási naplójába:

var app = WebApplication.Create(args);

app.Logger.LogInformation("The app started");

app.MapGet("/", () => "Hello World");

app.Run();

További információ: Naplózás a .NET-ben és a ASP.NET Core-ban

A függőség-injektálás (DI) konténer elérése

Az alábbi kód bemutatja, hogyan kérhet le szolgáltatásokat a DI-tárolóból az alkalmazás indításakor:


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();

Az alábbi kód bemutatja, hogyan érheti el a kulcsokat a DI-tárolóból a [FromKeyedServices] attribútum használatával:

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.";
}

További információ a DI-ről a Függőséginjektálás az ASP.NET Corecímű részben található.

WebApplicationBuilder

Ez a szakasz WebApplicationBuilderhasználatával tartalmaz mintakódot.

A tartalomgyöker, az alkalmazásnév és a környezet módosítása

A következő kód állítja be a tartalom gyökerét, az alkalmazás nevét és a környezetet:

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 inicializálja a WebApplicationBuilder osztály új példányát előre konfigurált alapértelmezett beállításokkal.

További információ: ASP.NET Alapvető alapismeretek áttekintése

A tartalomgyöker, az alkalmazás neve és a környezet módosítása környezeti változók vagy parancssor használatával

Az alábbi táblázat a tartalomgyöker, az alkalmazásnév és a környezet módosításához használt környezeti változót és parancssori argumentumot mutatja be:

funkció Környezet változó Parancssori argumentum
Alkalmazás neve ASPNETCORE_APPLICATIONNAME --applicationName
Környezet neve ASPNETCORE_ENVIRONMENT --environment
Tartalomgyökér ASPNETCORE_CONTENTROOT --contentRoot

Konfigurációszolgáltatók hozzáadása

Az alábbi minta hozzáadja az INI-konfigurációszolgáltatót:

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddIniFile("appsettings.ini");

var app = builder.Build();

Részletes információért lásd: Fájlkonfigurációs szolgáltatók az ASP.NET Core konfigurációjában.

Olvasási konfiguráció

Alapértelmezés szerint a WebApplicationBuilder több forrásból olvassa be a konfigurációt, beleértve a következőket:

  • appSettings.json és appSettings.{environment}.json
  • Környezeti változók
  • A parancssor

A konfigurációs források teljes listáját a Alapértelmezett konfiguráció című részben találja, amely része a konfigurációnak az ASP.NET Coredokumentumban.

Az alábbi kód beolvassa HelloKey konfigurációból, és megjeleníti az értéket a / végponton. Ha a konfiguráció értéke null, a "Hello" messagevan hozzárendelve:

var builder = WebApplication.CreateBuilder(args);

var message = builder.Configuration["HelloKey"] ?? "Hello";

var app = builder.Build();

app.MapGet("/", () => message);

app.Run();

A környezet olvasása

var builder = WebApplication.CreateBuilder(args);

if (builder.Environment.IsDevelopment())
{
    Console.WriteLine($"Running in development.");
}

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Naplózási szolgáltatók hozzáadása

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();

Szolgáltatások hozzáadása

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();

Az IHostBuilder testreszabása

A IHostBuilder meglévő bővítési metódusok a Gazdagép tulajdonsághasználatával érhetők el.

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();

Az IWebHostBuilder testreszabása

A IWebHostBuilder bővítménymetelyek a WebApplicationBuilder.WebHost tulajdonság használatával érhetők el.

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();

Webes gyökér módosítása

Alapértelmezés szerint a webes gyökér a wwwroot mappában lévő tartalomgyökerhez képest van. A webes gyökér az, ahol a Statikus fájl köztes szoftver statikus fájlokat keres. A webes gyökér a WebHostOptions, a parancssor vagy a UseWebRoot metódus használatával módosítható:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    Args = args,
    // Look for static files in webroot
    WebRootPath = "webroot"
});

var app = builder.Build();

app.Run();

Egyéni függőséginjektáló (DI) tároló

Az alábbi példa Autofachasznál:

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();

Köztes szoftver hozzáadása

Bármely meglévő ASP.NET Core middleware konfigurálható a WebApplication:

var app = WebApplication.Create(args);

// Setup the file server to serve static files.
app.UseFileServer();

app.MapGet("/", () => "Hello World!");

app.Run();

További információ: ASP.NET Core Middleware

Fejlesztői kivételoldal

WebApplication.CreateBuilder inicializálja a WebApplicationBuilder osztály új példányát előre konfigurált alapértelmezett értékekkel. A fejlesztői kivételoldal engedélyezve van az előre konfigurált alapértelmezett beállításokban. Ha a következő kódot a fejlesztési környezetben futtatja, a / navigálással egy barátságos oldal jelenik meg, ami megmutatja a kivételt.

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/", () =>
{
    throw new InvalidOperationException("Oops, the '/' route has thrown an exception.");
});

app.Run();