Přehled základů ASP.NET Core

Poznámka:

Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Upozorňující

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Důležité

Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Tento článek obsahuje přehled základních informací o vytváření aplikací ASP.NET Core, včetně injektáže závislostí (DI), konfigurace, middlewaru a dalších.

Základní Blazor pokyny, které přidají nebo nahrazují pokyny v tomto uzlu, najdete v tématu ASP.NET základy jádraBlazor.

Program.cs

Aplikace ASP.NET Core vytvořené pomocí webových šablon obsahují spouštěcí kód aplikace v souboru Program.cs. Soubor Program.cs je tam, kde:

  • Jsou nakonfigurovány služby vyžadované aplikací.
  • Je definován kanál zpracování požadavků aplikace jako řada komponent middlewaru.

Následující spouštěcí kód aplikace podporuje:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

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

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Injektáž závislostí (služby)

ASP.NET Core zahrnuje injektáž závislostí (DI), která zpřístupňuje nakonfigurované služby v celé aplikaci. Služby se přidají do kontejneru DI pomocí třídy WebApplicationBuilder.Services, v předchozím kódu builder.Services. Po vytvoření instance třídy WebApplicationBuilder se přidá mnoho služeb poskytovaných architekturou. builder je v následující kódu WebApplicationBuilder:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

V předchozím zvýrazněném kódu má builder konfiguraci, protokolování a mnoho dalších služeb přidaných do kontejneru DI.

Následující kód přidá Razor Pages, kontrolery MVC se zobrazeními a vlastní DbContext do kontejneru DI:

using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
   options.UseSqlServer(builder.Configuration.GetConnectionString("RPMovieContext")));

var app = builder.Build();

Služby se obvykle řeší z DI pomocí injektáže konstruktoru. Architektura DI poskytuje instanci této služby za běhu.

Následující kód používá injektáž konstruktoru k vyřešení kontextu databáze a protokolovacího nástroje z DI:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;
    private readonly ILogger<IndexModel> _logger;

    public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
    {
        _context = context;
        _logger = logger;
    }

    public IList<Movie> Movie { get;set; }

    public async Task OnGetAsync()
    {
        _logger.LogInformation("IndexModel OnGetAsync.");
        Movie = await _context.Movie.ToListAsync();
    }
}

Middleware

Kanál zpracování požadavků se skládá z řady komponent middlewaru. Každá komponenta provádí operace v kontextu HttpContext a buď vyvolá další middleware v kanálu, nebo požadavek ukončí.

Podle konvence se do kanálu přidá komponenta middlewaru vyvoláním metody rozšíření Use{Feature}. Middleware přidaný do aplikace je v následujícím kódu zvýrazněný:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

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

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Další informace najdete v tématu Middleware ASP.NET Core.

Hostitelský počítač

Při spuštění vytvoří aplikace ASP.NET Core hostitele. Hostitel zapouzdřuje všechny prostředky aplikace, například:

  • Implementace serveru HTTP
  • Komponenty middlewaru
  • Protokolování
  • Služby injektáže závislostí (DI)
  • Konfigurace

Existují tři různí hostitelé, kteří můžou spustit aplikaci ASP.NET Core:

ASP.NET Core WebApplication a WebApplicationBuilder typy se doporučují a používají ve všech šablonách ASP.NET Core. WebApplication chová se podobně jako obecný hostitel .NET a zveřejňuje mnoho stejných rozhraní, ale ke konfiguraci vyžaduje méně zpětných volání. ASP.NET Core WebHost je k dispozici pouze pro zpětnou kompatibilitu.

Následující příklad vytvoří WebApplicationinstanci :

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

Metoda WebApplicationBuilder.Build nakonfiguruje hostitele pomocí sady výchozích možností, například:

  • Použít Kestrel jako webový server a povolit integraci služby IIS
  • Načíst konfiguraci ze souboru appsettings.json, proměnných prostředí, argumentů příkazového řádku a dalších zdrojů konfigurace
  • Odeslat výstup protokolování do konzoly a poskytovatelům ladění

Newebové scénáře

Obecný hostitel umožňuje dalším typům aplikací používat obecně se vyskytující rozšíření architektury, jako je protokolování, injektáž závislostí (DI), konfigurace a správa doby života aplikace. Další informace najdete v tématu Obecný hostitel .NET v ASP.NET Core a Úlohy na pozadí s hostovanými službami v ASP.NET Core.

Servery

Aplikace ASP.NET Core používá k naslouchání požadavkům HTTP implementaci serveru HTTP. Server zjevuje požadavky aplikaci jako sadu funkcí požadavků sestavených do kontextu HttpContext.

ASP.NET Core nabízí následující implementace serveru:

  • Kestrel je webový server pro různé platformy. Kestrel se často spouští v konfiguraci reverzního proxy serveru pomocí služby IIS. V ASP.NET Core verzi 2.0 nebo novější lze Kestrel spustit jako veřejný hraniční server vystavený přímo na internetu.
  • IIS HTTP Server je server pro Windows, který používá službu IIS. S tímto serverem se aplikace ASP.NET Core a služba IIS spouští ve stejném procesu.
  • HTTP.sys je server pro Windows, který se nepoužívá se službou IIS.

Další informace najdete v tématu Implementace webových serverů v ASP.NET Core.

Konfigurace

ASP.NET Core poskytuje architekturu konfigurace, která získá nastavení jako páry název-hodnota od seřazené sady zprostředkovatelů konfigurace. Předdefinovaní zprostředkovatelé konfigurace jsou k dispozici pro různé zdroje, jako jsou soubory .json, soubory .xml, proměnné prostředí a argumenty příkazového řádku. Napište vlastní zprostředkovatele konfigurace pro podporu jiných zdrojů.

Ve výchozím nastavení jsou aplikace ASP.NET Core nakonfigurované pro čtení ze souboru appsettings.json, proměnných prostředí, příkazového řádku a dalších. Když se načte konfigurace aplikace, hodnoty z proměnných prostředí přepíší hodnoty ze souboru appsettings.json.

Pro správu důvěrných konfiguračních dat, jako jsou hesla, poskytuje .NET Core nástroj Secret Manager. Pro produkční tajné kódy doporučujeme Azure Key Vault.

Další informace najdete v tématu Konfigurace v ASP.NET Core.

Prostředí

V ASP.NET Core jsou k dispozici prostředí spouštění, například Development, Staging a Production. Zadejte prostředí, ve kterém aplikace běží, nastavením proměnné prostředí ASPNETCORE_ENVIRONMENT. ASP.NET Core přečte proměnnou prostředí při spuštění aplikace a uloží hodnotu v implementaci IWebHostEnvironment. Tato implementace je dostupná kdekoli v aplikaci prostřednictvím injektáže závislostí (DI).

Následující příklad nakonfiguruje obslužnou rutinu výjimek a middleware HTTP Strict Transport Security Protocol (HSTS) v případě, když se nespouští v prostředí Development:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

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

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Další informace viz Použití více prostředí v ASP.NET Core.

Protokolování

ASP.NET Core podporuje rozhraní API protokolování, které funguje s různými integrovanými poskytovateli protokolování a poskytovateli protokolování třetích stran. Mezi dostupné poskytovatele patří:

  • Konzola
  • Ladění
  • Trasování událostí ve Windows
  • Protokol událostí Windows
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Chcete-li vytvořit protokoly, přeložte službu ILogger<TCategoryName> z injektáže závislostí (DI) a volejte metody protokolování, jako je LogInformation. Příklad:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;
    private readonly ILogger<IndexModel> _logger;

    public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
    {
        _context = context;
        _logger = logger;
    }

    public IList<Movie> Movie { get;set; }

    public async Task OnGetAsync()
    {
        _logger.LogInformation("IndexModel OnGetAsync.");
        Movie = await _context.Movie.ToListAsync();
    }
}

Další informace najdete v článku o protokolování v .NET Core a ASP.NET Core.

Směrování

Trasa je vzor adresy URL, který se mapuje na obslužnou rutinu. Obslužná rutina je obvykle stránka Razor, metoda akce v kontroleru MVC nebo middleware. Směrování ASP.NET Core vám dává kontrolu nad adresami URL, které vaše aplikace používá.

Následující kód vygenerovaný šablonou webové aplikace ASP.NET Core volá UseRouting:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Další informace najdete v tématu Směrování v ASP.NET Core.

Zpracování chyb

ASP.NET Core obsahuje integrované funkce pro zpracování chyb, například:

  • Stránka výjimky pro vývojáře
  • Stránky vlastních chyb
  • Statické stránky stavového kódu
  • Ošetření výjimek při spuštění

Další informace najdete v tématu Zpracování chyb v ASP.NET Core.

Vytváření požadavků HTTP

Implementace IHttpClientFactory je k dispozici pro vytváření instancí HttpClient. Objekt pro vytváření:

  • Poskytuje centrální umístění pro pojmenování a konfiguraci logických instancí HttpClient. Zaregistrujte a nakonfigurujte například klienta github pro přístup ke GitHubu. Zaregistrujte a nakonfigurujte výchozího klienta pro jiné účely.
  • Podporuje registraci a řetězení více obslužných rutin delegování pro sestavení kanálu middlewaru odchozích požadavků. Tento model se podobá příchozímu kanálu middlewaru ASP.NET Core. Model poskytuje mechanismus pro správu obecně se vyskytujících problémů s požadavky HTTP, včetně ukládání do mezipaměti, zpracování chyb, serializace a protokolování.
  • Integruje se s Polly, oblíbenou knihovnou třetí strany pro zpracování přechodných chyb.
  • Spravuje sdružování a dobu života základních instancí HttpClientHandler, aby se zabránilo běžným problémům s DNS, ke kterým dochází při ruční správě doby života HttpClient.
  • Přidává konfigurovatelné prostředí protokolování prostřednictvím rozhraní ILogger pro všechny požadavky odeslané klienty vytvořenými objektem pro vytváření.

Další informace najdete v tématu Vytváření požadavků HTTP pomocí IHttpClientFactory v ASP.NET Core.

Kořen obsahu

Kořen obsahu je základní cesta pro:

  • Spustitelný soubor hostující aplikaci (.exe)
  • Kompilovaná sestavení, která tvoří aplikaci (.dll)
  • Soubory obsahu používané aplikací, například:
    • Soubory Razor (.cshtml, .razor)
    • Konfigurační soubory (.json, .xml)
    • Datové soubory (.db)
  • Kořen webu, obvykle složka wwwroot

Během vývoje se jako výchozí kořen obsahu použije kořenový adresář projektu. Tento adresář je také základní cestou pro soubory obsahu aplikace i kořen webu. Zadejte jiný kořen obsahu nastavením jeho cesty při sestavování hostitele. Další informace najdete v tématu Kořen obsahu.

Kořen webu

Kořen webu je základní cesta pro veřejné statické soubory prostředků, například:

  • Šablony stylů (.css)
  • JavaScript (.js)
  • Obrázky (.png, .jpg)

Ve výchozím nastavení se statické soubory obsluhují pouze z kořenového adresáře webu a jeho podadresářů. Výchozí hodnota kořenové cesty webu je {content root}/wwwroot. Zadejte jiný kořen webu nastavením jeho cesty při sestavování hostitele. Další informace najdete v tématu Kořen webu.

Zabraňte publikování souborů v adresáři wwwroot pomocí položky projektu <Content> v souboru projektu. Následující příklad brání publikování obsahu v adresáři wwwroot/local a jeho podadresářích:

<ItemGroup>
  <Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>

V souborech Razor.cshtml odkazuje ~/ na kořen webu. Cesta začínající na ~/ se označuje jako virtuální cesta.

Další informace najdete v tématu Statické soubory v ASP.NET Core.

Další materiály

Tento článek obsahuje přehled základních informací o vytváření aplikací ASP.NET Core, včetně injektáže závislostí (DI), konfigurace, middlewaru a dalších.

Program.cs

Aplikace ASP.NET Core vytvořené pomocí webových šablon obsahují spouštěcí kód aplikace v souboru Program.cs. Soubor Program.cs je tam, kde:

  • Jsou nakonfigurovány služby vyžadované aplikací.
  • Je definován kanál zpracování požadavků aplikace jako řada komponent middlewaru.

Následující spouštěcí kód aplikace podporuje:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

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

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Injektáž závislostí (služby)

ASP.NET Core zahrnuje injektáž závislostí (DI), která zpřístupňuje nakonfigurované služby v celé aplikaci. Služby se přidají do kontejneru DI pomocí třídy WebApplicationBuilder.Services, v předchozím kódu builder.Services. Po vytvoření instance třídy WebApplicationBuilder se přidá mnoho služeb poskytovaných architekturou. builder je v následující kódu WebApplicationBuilder:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

V předchozím zvýrazněném kódu má builder konfiguraci, protokolování a mnoho dalších služeb přidaných do kontejneru DI.

Následující kód přidá Razor Pages, kontrolery MVC se zobrazeními a vlastní DbContext do kontejneru DI:

using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
   options.UseSqlServer(builder.Configuration.GetConnectionString("RPMovieContext")));

var app = builder.Build();

Služby se obvykle řeší z DI pomocí injektáže konstruktoru. Architektura DI poskytuje instanci této služby za běhu.

Následující kód používá injektáž konstruktoru k vyřešení kontextu databáze a protokolovacího nástroje z DI:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;
    private readonly ILogger<IndexModel> _logger;

    public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
    {
        _context = context;
        _logger = logger;
    }

    public IList<Movie> Movie { get;set; }

    public async Task OnGetAsync()
    {
        _logger.LogInformation("IndexModel OnGetAsync.");
        Movie = await _context.Movie.ToListAsync();
    }
}

Middleware

Kanál zpracování požadavků se skládá z řady komponent middlewaru. Každá komponenta provádí operace v kontextu HttpContext a buď vyvolá další middleware v kanálu, nebo požadavek ukončí.

Podle konvence se do kanálu přidá komponenta middlewaru vyvoláním metody rozšíření Use{Feature}. Middleware přidaný do aplikace je v následujícím kódu zvýrazněný:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

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

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Další informace najdete v tématu Middleware ASP.NET Core.

Hostitelský počítač

Při spuštění vytvoří aplikace ASP.NET Core hostitele. Hostitel zapouzdřuje všechny prostředky aplikace, například:

  • Implementace serveru HTTP
  • Komponenty middlewaru
  • Protokolování
  • Služby injektáže závislostí (DI)
  • Konfigurace

Existují tři různí hostitelé, kteří můžou spustit aplikaci ASP.NET Core:

ASP.NET Core WebApplication a WebApplicationBuilder typy se doporučují a používají ve všech šablonách ASP.NET Core. WebApplication chová se podobně jako obecný hostitel .NET a zveřejňuje mnoho stejných rozhraní, ale ke konfiguraci vyžaduje méně zpětných volání. ASP.NET Core WebHost je k dispozici pouze pro zpětnou kompatibilitu.

Následující příklad vytvoří WebApplicationinstanci :

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

Metoda WebApplicationBuilder.Build nakonfiguruje hostitele pomocí sady výchozích možností, například:

  • Použít Kestrel jako webový server a povolit integraci služby IIS
  • Načíst konfiguraci ze souboru appsettings.json, proměnných prostředí, argumentů příkazového řádku a dalších zdrojů konfigurace
  • Odeslat výstup protokolování do konzoly a poskytovatelům ladění

Newebové scénáře

Obecný hostitel umožňuje dalším typům aplikací používat obecně se vyskytující rozšíření architektury, jako je protokolování, injektáž závislostí (DI), konfigurace a správa doby života aplikace. Další informace najdete v tématu Obecný hostitel .NET v ASP.NET Core a Úlohy na pozadí s hostovanými službami v ASP.NET Core.

Servery

Aplikace ASP.NET Core používá k naslouchání požadavkům HTTP implementaci serveru HTTP. Server zjevuje požadavky aplikaci jako sadu funkcí požadavků sestavených do kontextu HttpContext.

ASP.NET Core nabízí následující implementace serveru:

  • Kestrel je webový server pro různé platformy. Kestrel se často spouští v konfiguraci reverzního proxy serveru pomocí služby IIS. V ASP.NET Core verzi 2.0 nebo novější lze Kestrel spustit jako veřejný hraniční server vystavený přímo na internetu.
  • IIS HTTP Server je server pro Windows, který používá službu IIS. S tímto serverem se aplikace ASP.NET Core a služba IIS spouští ve stejném procesu.
  • HTTP.sys je server pro Windows, který se nepoužívá se službou IIS.

Další informace najdete v tématu Implementace webových serverů v ASP.NET Core.

Konfigurace

ASP.NET Core poskytuje architekturu konfigurace, která získá nastavení jako páry název-hodnota od seřazené sady zprostředkovatelů konfigurace. Předdefinovaní zprostředkovatelé konfigurace jsou k dispozici pro různé zdroje, jako jsou soubory .json, soubory .xml, proměnné prostředí a argumenty příkazového řádku. Napište vlastní zprostředkovatele konfigurace pro podporu jiných zdrojů.

Ve výchozím nastavení jsou aplikace ASP.NET Core nakonfigurované pro čtení ze souboru appsettings.json, proměnných prostředí, příkazového řádku a dalších. Když se načte konfigurace aplikace, hodnoty z proměnných prostředí přepíší hodnoty ze souboru appsettings.json.

Pro správu důvěrných konfiguračních dat, jako jsou hesla, poskytuje .NET Core nástroj Secret Manager. Pro produkční tajné kódy doporučujeme Azure Key Vault.

Další informace najdete v tématu Konfigurace v ASP.NET Core.

Prostředí

V ASP.NET Core jsou k dispozici prostředí spouštění, například Development, Staging a Production. Zadejte prostředí, ve kterém aplikace běží, nastavením proměnné prostředí ASPNETCORE_ENVIRONMENT. ASP.NET Core přečte proměnnou prostředí při spuštění aplikace a uloží hodnotu v implementaci IWebHostEnvironment. Tato implementace je dostupná kdekoli v aplikaci prostřednictvím injektáže závislostí (DI).

Následující příklad nakonfiguruje obslužnou rutinu výjimek a middleware HTTP Strict Transport Security Protocol (HSTS) v případě, když se nespouští v prostředí Development:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

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

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Další informace viz Použití více prostředí v ASP.NET Core.

Protokolování

ASP.NET Core podporuje rozhraní API protokolování, které funguje s různými integrovanými poskytovateli protokolování a poskytovateli protokolování třetích stran. Mezi dostupné poskytovatele patří:

  • Konzola
  • Ladění
  • Trasování událostí ve Windows
  • Protokol událostí Windows
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Chcete-li vytvořit protokoly, přeložte službu ILogger<TCategoryName> z injektáže závislostí (DI) a volejte metody protokolování, jako je LogInformation. Příklad:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;
    private readonly ILogger<IndexModel> _logger;

    public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
    {
        _context = context;
        _logger = logger;
    }

    public IList<Movie> Movie { get;set; }

    public async Task OnGetAsync()
    {
        _logger.LogInformation("IndexModel OnGetAsync.");
        Movie = await _context.Movie.ToListAsync();
    }
}

Další informace najdete v článku o protokolování v .NET Core a ASP.NET Core.

Směrování

Trasa je vzor adresy URL, který se mapuje na obslužnou rutinu. Obslužná rutina je obvykle stránka Razor, metoda akce v kontroleru MVC nebo middleware. Směrování ASP.NET Core vám dává kontrolu nad adresami URL, které vaše aplikace používá.

Následující kód vygenerovaný šablonou webové aplikace ASP.NET Core volá UseRouting:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Další informace najdete v tématu Směrování v ASP.NET Core.

Zpracování chyb

ASP.NET Core obsahuje integrované funkce pro zpracování chyb, například:

  • Stránka výjimky pro vývojáře
  • Stránky vlastních chyb
  • Statické stránky stavového kódu
  • Ošetření výjimek při spuštění

Další informace najdete v tématu Zpracování chyb v ASP.NET Core.

Vytváření požadavků HTTP

Implementace IHttpClientFactory je k dispozici pro vytváření instancí HttpClient. Objekt pro vytváření:

  • Poskytuje centrální umístění pro pojmenování a konfiguraci logických instancí HttpClient. Zaregistrujte a nakonfigurujte například klienta github pro přístup ke GitHubu. Zaregistrujte a nakonfigurujte výchozího klienta pro jiné účely.
  • Podporuje registraci a řetězení více obslužných rutin delegování pro sestavení kanálu middlewaru odchozích požadavků. Tento model se podobá příchozímu kanálu middlewaru ASP.NET Core. Model poskytuje mechanismus pro správu obecně se vyskytujících problémů s požadavky HTTP, včetně ukládání do mezipaměti, zpracování chyb, serializace a protokolování.
  • Integruje se s Polly, oblíbenou knihovnou třetí strany pro zpracování přechodných chyb.
  • Spravuje sdružování a dobu života základních instancí HttpClientHandler, aby se zabránilo běžným problémům s DNS, ke kterým dochází při ruční správě doby života HttpClient.
  • Přidává konfigurovatelné prostředí protokolování prostřednictvím rozhraní ILogger pro všechny požadavky odeslané klienty vytvořenými objektem pro vytváření.

Další informace najdete v tématu Vytváření požadavků HTTP pomocí IHttpClientFactory v ASP.NET Core.

Kořen obsahu

Kořen obsahu je základní cesta pro:

  • Spustitelný soubor hostující aplikaci (.exe)
  • Kompilovaná sestavení, která tvoří aplikaci (.dll)
  • Soubory obsahu používané aplikací, například:
    • Soubory Razor (.cshtml, .razor)
    • Konfigurační soubory (.json, .xml)
    • Datové soubory (.db)
  • Kořen webu, obvykle složka wwwroot

Během vývoje se jako výchozí kořen obsahu použije kořenový adresář projektu. Tento adresář je také základní cestou pro soubory obsahu aplikace i kořen webu. Zadejte jiný kořen obsahu nastavením jeho cesty při sestavování hostitele. Další informace najdete v tématu Kořen obsahu.

Kořen webu

Kořen webu je základní cesta pro veřejné statické soubory prostředků, například:

  • Šablony stylů (.css)
  • JavaScript (.js)
  • Obrázky (.png, .jpg)

Ve výchozím nastavení se statické soubory obsluhují pouze z kořenového adresáře webu a jeho podadresářů. Výchozí hodnota kořenové cesty webu je {content root}/wwwroot. Zadejte jiný kořen webu nastavením jeho cesty při sestavování hostitele. Další informace najdete v tématu Kořen webu.

Zabraňte publikování souborů v adresáři wwwroot pomocí položky projektu <Content> v souboru projektu. Následující příklad brání publikování obsahu v adresáři wwwroot/local a jeho podadresářích:

<ItemGroup>
  <Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>

V souborech Razor.cshtml odkazuje ~/ na kořen webu. Cesta začínající na ~/ se označuje jako virtuální cesta.

Další informace najdete v tématu Statické soubory v ASP.NET Core.

Další materiály

Tento článek obsahuje přehled základních informací o vytváření aplikací ASP.NET Core, včetně injektáže závislostí (DI), konfigurace, middlewaru a dalších.

Spouštěcí třída

Třída Startup je tam, kde:

  • Jsou nakonfigurovány služby vyžadované aplikací.
  • Je definován kanál zpracování požadavků aplikace jako řada komponent middlewaru.

Tady je ukázková třída Startup:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<RazorPagesMovieContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));

        services.AddControllersWithViews();
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapDefaultControllerRoute();
            endpoints.MapRazorPages();
        });
    }
}

Další informace najdete v tématu Spuštění aplikace v ASP.NET Core.

Injektáž závislostí (služby)

ASP.NET Core zahrnuje integrovanou architekturu injektáže závislostí (DI), která zpřístupňuje nakonfigurované služby v celé aplikaci. Například komponenta protokolování je služba.

Kód pro konfiguraci (nebo registraci) služeb je přidaný do metody Startup.ConfigureServices. Příklad:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<RazorPagesMovieContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));

    services.AddControllersWithViews();
    services.AddRazorPages();
}

Služby se obvykle řeší z DI pomocí injektáže konstruktoru. Při injektáži konstruktoru třída deklaruje parametr konstruktoru požadovaného typu nebo rozhraní. Architektura DI poskytuje instanci této služby za běhu.

Následující příklad používá injektáž konstruktoru k překladu RazorPagesMovieContext z DI:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;

    public IndexModel(RazorPagesMovieContext context)
    {
        _context = context;
    }

    // ...

    public async Task OnGetAsync()
    {
        Movies = await _context.Movies.ToListAsync();
    }
}

Pokud integrovaný kontejner Inversion of Control (IoC) nesplňuje všechny potřeby aplikace, můžete místo toho použít kontejner IoC třetí strany.

Další informace naleznete v tématu Injektáž závislostí v ASP.NET Core.

Middleware

Kanál zpracování požadavků se skládá z řady komponent middlewaru. Každá komponenta provádí operace v kontextu HttpContext a buď vyvolá další middleware v kanálu, nebo požadavek ukončí.

Podle konvence se do kanálu přidá komponenta middlewaru vyvoláním metody rozšíření Use... v metodě Startup.Configure. Chcete-li například povolit vykreslování statických souborů, volejte UseStaticFiles.

Následující příklad nakonfiguruje kanál zpracování požadavků:

public void Configure(IApplicationBuilder app)
{
    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
        endpoints.MapRazorPages();
    });
}

ASP.NET Core obsahuje bohatou sadu integrovaného middlewaru. Lze také napsat vlastní komponenty middlewaru.

Další informace najdete v tématu Middleware ASP.NET Core.

Hostitelský počítač

Při spuštění vytvoří aplikace ASP.NET Core hostitele. Hostitel zapouzdřuje všechny prostředky aplikace, například:

  • Implementace serveru HTTP
  • Komponenty middlewaru
  • Protokolování
  • Služby injektáže závislostí (DI)
  • Konfigurace

Existují dva různí hostitelé:

  • Obecný hostitel .NET
  • Webový hostitel ASP.NET Core

Doporučuje se obecný hostitel .NET. Webový hostitel ASP.NET Core je k dispozici pouze pro zpětnou kompatibilitu.

Následující příklad vytvoří obecného hostitele .NET:

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Metody CreateDefaultBuilder a ConfigureWebHostDefaults konfigurují hostitele pomocí sady výchozích možností, například:

  • Použít Kestrel jako webový server a povolit integraci služby IIS
  • Načíst konfiguraci ze souboru appsettings.json, appsettings.{Environment}.json, proměnných prostředí, argumentů příkazového řádku a dalších zdrojů konfigurace
  • Odeslat výstup protokolování do konzoly a poskytovatelům ladění

Další informace najdete v tématu Obecný hostitel .NET v ASP.NET Core.

Newebové scénáře

Obecný hostitel umožňuje dalším typům aplikací používat obecně se vyskytující rozšíření architektury, jako je protokolování, injektáž závislostí (DI), konfigurace a správa doby života aplikace. Další informace najdete v tématu Obecný hostitel .NET v ASP.NET Core a Úlohy na pozadí s hostovanými službami v ASP.NET Core.

Servery

Aplikace ASP.NET Core používá k naslouchání požadavkům HTTP implementaci serveru HTTP. Server zjevuje požadavky aplikaci jako sadu funkcí požadavků sestavených do kontextu HttpContext.

ASP.NET Core nabízí následující implementace serveru:

  • Kestrel je webový server pro různé platformy. Kestrel se často spouští v konfiguraci reverzního proxy serveru pomocí služby IIS. V ASP.NET Core verzi 2.0 nebo novější lze Kestrel spustit jako veřejný hraniční server vystavený přímo na internetu.
  • IIS HTTP Server je server pro Windows, který používá službu IIS. S tímto serverem se aplikace ASP.NET Core a služba IIS spouští ve stejném procesu.
  • HTTP.sys je server pro Windows, který se nepoužívá se službou IIS.

Další informace najdete v tématu Implementace webových serverů v ASP.NET Core.

Konfigurace

ASP.NET Core poskytuje architekturu konfigurace, která získá nastavení jako páry název-hodnota od seřazené sady zprostředkovatelů konfigurace. Předdefinovaní zprostředkovatelé konfigurace jsou k dispozici pro různé zdroje, jako jsou soubory .json, soubory .xml, proměnné prostředí a argumenty příkazového řádku. Napište vlastní zprostředkovatele konfigurace pro podporu jiných zdrojů.

Ve výchozím nastavení jsou aplikace ASP.NET Core nakonfigurované pro čtení ze souboru appsettings.json, proměnných prostředí, příkazového řádku a dalších. Když se načte konfigurace aplikace, hodnoty z proměnných prostředí přepíší hodnoty ze souboru appsettings.json.

Upřednostňovaným způsobem čtení souvisejících hodnot konfigurace je použití vzoru možností. Další informace najdete v tématu Vytvoření vazby hierarchických konfiguračních dat pomocí vzoru možností.

Pro správu důvěrných konfiguračních dat, jako jsou hesla, poskytuje .NET Core nástroj Secret Manager. Pro produkční tajné kódy doporučujeme Azure Key Vault.

Další informace najdete v tématu Konfigurace v ASP.NET Core.

Prostředí

Spouštěcí prostředí, například Development, a StagingProduction, jsou v ASP.NET Core inherentní. Zadejte prostředí, ve kterém aplikace běží, nastavením proměnné prostředí ASPNETCORE_ENVIRONMENT. ASP.NET Core přečte proměnnou prostředí při spuštění aplikace a uloží hodnotu v implementaci IWebHostEnvironment. Tato implementace je dostupná kdekoli v aplikaci prostřednictvím injektáže závislostí (DI).

Následující příklad nakonfiguruje aplikaci tak, aby poskytovala podrobné informace o chybách při spuštění v prostředí Development:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
        endpoints.MapRazorPages();
    });
}

Další informace viz Použití více prostředí v ASP.NET Core.

Protokolování

ASP.NET Core podporuje rozhraní API protokolování, které funguje s různými integrovanými poskytovateli protokolování a poskytovateli protokolování třetích stran. Mezi dostupné poskytovatele patří:

  • Konzola
  • Ladění
  • Trasování událostí ve Windows
  • Protokol událostí Windows
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Chcete-li vytvořit protokoly, přeložte službu ILogger<TCategoryName> z injektáže závislostí (DI) a volejte metody protokolování, jako je LogInformation. Příklad:

public class TodoController : ControllerBase
{
    private readonly ILogger _logger;

    public TodoController(ILogger<TodoController> logger)
    {
        _logger = logger;
    }

    [HttpGet("{id}", Name = "GetTodo")]
    public ActionResult<TodoItem> GetById(string id)
    {
        _logger.LogInformation(LoggingEvents.GetItem, "Getting item {Id}", id);
        
        // Item lookup code removed.
        
        if (item == null)
        {
            _logger.LogWarning(LoggingEvents.GetItemNotFound, "GetById({Id}) NOT FOUND", id);
            return NotFound();
        }
        
        return item;
    }
}

Metody protokolování, jako je LogInformation, podporují libovolný počet polí. Tato pole se běžně používají k vytvoření řetězce zprávy (string), ale někteří poskytovatelé protokolování je odesílají do úložiště dat jako samostatná pole. Tato funkce umožňuje poskytovatelům protokolování implementovat sémantické protokolování, označované také jako strukturované protokolování.

Další informace najdete v článku o protokolování v .NET Core a ASP.NET Core.

Směrování

Trasa je vzor adresy URL, který se mapuje na obslužnou rutinu. Obslužná rutina je obvykle stránka Razor, metoda akce v kontroleru MVC nebo middleware. Směrování ASP.NET Core vám dává kontrolu nad adresami URL, které vaše aplikace používá.

Další informace najdete v tématu Směrování v ASP.NET Core.

Zpracování chyb

ASP.NET Core obsahuje integrované funkce pro zpracování chyb, například:

  • Stránka výjimky pro vývojáře
  • Stránky vlastních chyb
  • Statické stránky stavového kódu
  • Ošetření výjimek při spuštění

Další informace najdete v tématu Zpracování chyb v ASP.NET Core.

Vytváření požadavků HTTP

Implementace IHttpClientFactory je k dispozici pro vytváření instancí HttpClient. Objekt pro vytváření:

  • Poskytuje centrální umístění pro pojmenování a konfiguraci logických instancí HttpClient. Zaregistrujte a nakonfigurujte například klienta github pro přístup ke GitHubu. Zaregistrujte a nakonfigurujte výchozího klienta pro jiné účely.
  • Podporuje registraci a řetězení více obslužných rutin delegování pro sestavení kanálu middlewaru odchozích požadavků. Tento model se podobá příchozímu kanálu middlewaru ASP.NET Core. Model poskytuje mechanismus pro správu obecně se vyskytujících problémů s požadavky HTTP, včetně ukládání do mezipaměti, zpracování chyb, serializace a protokolování.
  • Integruje se s Polly, oblíbenou knihovnou třetí strany pro zpracování přechodných chyb.
  • Spravuje sdružování a dobu života základních instancí HttpClientHandler, aby se zabránilo běžným problémům s DNS, ke kterým dochází při ruční správě doby života HttpClient.
  • Přidává konfigurovatelné prostředí protokolování prostřednictvím rozhraní ILogger pro všechny požadavky odeslané klienty vytvořenými objektem pro vytváření.

Další informace najdete v tématu Vytváření požadavků HTTP pomocí IHttpClientFactory v ASP.NET Core.

Kořen obsahu

Kořen obsahu je základní cesta pro:

  • Spustitelný soubor hostující aplikaci (.exe)
  • Kompilovaná sestavení, která tvoří aplikaci (.dll)
  • Soubory obsahu používané aplikací, například:
    • Soubory Razor (.cshtml, .razor)
    • Konfigurační soubory (.json, .xml)
    • Datové soubory (.db)
  • Kořen webu, obvykle složka wwwroot

Během vývoje se jako výchozí kořen obsahu použije kořenový adresář projektu. Tento adresář je také základní cestou pro soubory obsahu aplikace i kořen webu. Zadejte jiný kořen obsahu nastavením jeho cesty při sestavování hostitele. Další informace najdete v tématu Kořen obsahu.

Kořen webu

Kořen webu je základní cesta pro veřejné statické soubory prostředků, například:

  • Šablony stylů (.css)
  • JavaScript (.js)
  • Obrázky (.png, .jpg)

Ve výchozím nastavení se statické soubory obsluhují pouze z kořenového adresáře webu a jeho podadresářů. Výchozí hodnota kořenové cesty webu je {content root}/wwwroot. Zadejte jiný kořen webu nastavením jeho cesty při sestavování hostitele. Další informace najdete v tématu Kořen webu.

Zabraňte publikování souborů v adresáři wwwroot pomocí položky projektu <Content> v souboru projektu. Následující příklad brání publikování obsahu v adresáři wwwroot/local a jeho podadresářích:

<ItemGroup>
  <Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>

V souborech Razor.cshtml odkazuje vlnovka a lomítko (~/) na kořen webu. Cesta začínající na ~/ se označuje jako virtuální cesta.

Další informace najdete v tématu Statické soubory v ASP.NET Core.