Platforma ASP.NET Core — podstawy

Ten artykuł zawiera omówienie kluczowych tematów dotyczących sposobu tworzenia aplikacji ASP.NET Core aplikacji.

Klasa Startup

Klasa Startup to miejsce, w którym:

  • Usługi wymagane przez aplikację są skonfigurowane.
  • Potok obsługi żądań aplikacji jest definiowany jako seria składników oprogramowania pośredniczącego.

Oto przykładowa Startup klasa:

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

Aby uzyskać więcej informacji, zobacz Uruchamianie aplikacji w ASP.NET Core.

Wstrzykiwanie zależności (usługi)

ASP.NET Core zawiera wbudowaną platformę wstrzykiwania zależności (DI, dependency injection), która udostępnia skonfigurowane usługi w całej aplikacji. Na przykład składnik rejestrowania jest usługą.

Kod do konfigurowania (lub rejestrowania) usług jest dodawany do Startup.ConfigureServices metody . Na przykład:

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

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

Usługi są zwykle rozpoznawane z wstrzykiwania zależności przy użyciu iniekcji konstruktora. Za pomocą iniekcji konstruktora klasa deklaruje parametr konstruktora wymaganego typu lub interfejsu. Środowisko di zapewnia wystąpienie tej usługi w czasie wykonywania.

W poniższym przykładzie użyto iniekcji konstruktora, aby rozwiązać RazorPagesMovieContext problem z wstrzykiwania zależności:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;

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

    // ...

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

Jeśli wbudowany kontener inversion of Control (IoC) nie spełnia wszystkich potrzeb aplikacji, zamiast tego można użyć kontenera IoC innej firmy.

Aby uzyskać więcej informacji, zobacz Wstrzykiwanie zależności w ASP.NET Core.

Oprogramowanie pośredniczące

Potok obsługi żądań składa się z serii składników oprogramowania pośredniczącego. Każdy składnik wykonuje operacje na i wywołuje następne oprogramowanie pośredniczące w potoku HttpContext lub kończy żądanie.

Zgodnie z konwencją składnik oprogramowania pośredniczącego jest dodawany do potoku przez wywołania Use... metody rozszerzenia w metodzie Startup.Configure . Aby na przykład włączyć renderowanie plików statycznych, wywołaj funkcję UseStaticFiles .

Poniższy przykład umożliwia skonfigurowanie potoku obsługi żądań:

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

    app.UseRouting();

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

ASP.NET Core zawiera bogaty zestaw wbudowanego oprogramowania pośredniczącego. Można również zapisywać niestandardowe składniki oprogramowania pośredniczącego.

Aby uzyskać więcej informacji, zobacz ASP.NET Core Middleware.

Host

Podczas uruchamiania aplikacja ASP.NET Core tworzy hosta. Host hermetyzuje wszystkie zasoby aplikacji, takie jak:

  • Implementacja serwera HTTP
  • Składniki oprogramowania pośredniczącego
  • Rejestrowanie
  • Usługi wstrzykiwania zależności
  • Konfigurowanie

Istnieją dwa różne hosty:

  • Ogólny host .NET
  • ASP.NET Core Web Host

Zalecany jest host ogólny .NET. Host ASP.NET Core sieci Web jest dostępny tylko w celu zapewnienia zgodności z poprzednimi wersjami.

W poniższym przykładzie jest generyczny host .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 i ConfigureWebHostDefaults konfigurują hosta przy użyciu zestawu opcji domyślnych, takich jak:

  • Użyj Kestrel go jako serwera internetowego i włącz integrację usług IIS.
  • Załaduj appsettings.json konfigurację z pliku , appsettings.{ Nazwa środowiska}.json, zmienne środowiskowe, argumenty wiersza polecenia i inne źródła konfiguracji.
  • Wysyłanie danych wyjściowych rejestrowania do dostawców konsoli i debugowania.

Aby uzyskać więcej informacji, zobacz Ogólny host .NET w programie ASP.NET Core.

Scenariusze inne niż sieci Web

Host ogólny umożliwia innym typom aplikacji korzystanie z uniwersalnych rozszerzeń struktury, takich jak rejestrowanie, wstrzykiwanie zależności (DI), konfiguracja i zarządzanie okresem istnienia aplikacji. Aby uzyskać więcej informacji, zobacz Ogólny host .NET w programie ASP.NET Core i Zadania w tle z usługami hostowanych w ASP.NET Core.

Serwery

Aplikacja ASP.NET Core używa implementacji serwera HTTP do nasłuchiwać żądań HTTP. Serwer zwraca żądania do aplikacji jako zestaw funkcji żądań składających się z HttpContext .

ASP.NET Core zawiera następujące implementacje serwera:

  • Kestrel to międzyplatformowy serwer internetowy. KestrelProgram jest często uruchamiany w konfiguracji zwrotnego serwera proxy przy użyciu usług IIS. W ASP.NET Core 2.0 lub nowszej można uruchomić jako publiczny serwer brzegowy, który jest bezpośrednio w Kestrel Internecie.
  • Serwer HTTP usług IIS to serwer dla Windows, który korzysta z usług IIS. Na tym serwerze aplikacja ASP.NET Core i usługi IIS działają w tym samym procesie.
  • HTTP.sys to serwer usługi Windows, który nie jest używany z usługami IIS.

Aby uzyskać więcej informacji, zobacz Implementacje serwera sieci Web w ASP.NET Core.

Konfigurowanie

ASP.NET Core platformę konfiguracji, która pobiera ustawienia jako pary nazwa-wartość od uporządkowanego zestawu dostawców konfiguracji. Dostawcy wbudowanej konfiguracji są dostępni dla różnych źródeł, takich jak pliki json, pliki .xml, zmienne środowiskowe i argumenty wiersza polecenia. Pisanie niestandardowych dostawców konfiguracji do obsługi innych źródeł.

Domyślnie programASP.NET Core aplikacje są skonfigurowane do odczytu ze zmiennych środowiskowych, wiersza appsettings.json polecenia i innych. Po załadowaniu konfiguracji aplikacji wartości ze zmiennych środowiskowych zastępują wartości appsettings.json z .

Preferowanym sposobem odczytywania powiązanych wartości konfiguracji jest użycie wzorca opcji. Aby uzyskać więcej informacji, zobacz Wiązanie danych konfiguracji hierarchicznej przy użyciu wzorca opcji.

Do zarządzania poufnymi danymi konfiguracji, takimi jak hasła, program .NET Core udostępnia program Secret Manager. W przypadku produkcyjnych wpisów tajnych zalecamy Azure Key Vault.

Aby uzyskać więcej informacji, zobacz Konfiguracja w ASP.NET Core.

Środowiska

Środowiska wykonawcze, takie jak , i , są najwyższej klasy w Development Staging Production ASP.NET Core. Określ środowisko, w którym jest uruchomiona aplikacja, ustawiając ASPNETCORE_ENVIRONMENT zmienną środowiskową. ASP.NET Core odczytuje zmienną środowiskową podczas uruchamiania aplikacji i zapisuje wartość w IWebHostEnvironment implementacji. Ta implementacja jest dostępna w dowolnym miejscu aplikacji za pośrednictwem wstrzykiwania zależności (DI, dependency injection).

Poniższy przykład umożliwia skonfigurowanie aplikacji w celu podania szczegółowych informacji o błędzie podczas uruchamiania w Development środowisku:

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

Aby uzyskać więcej informacji, zobacz Używanie wielu środowisk na platformie ASP.NET Core.

Rejestrowanie

ASP.NET Core obsługuje interfejs API rejestrowania, który współpracuje z różnymi wbudowanymi i innymi dostawcami rejestrowania. Do dostępnych dostawców należą:

  • Konsola
  • Debugowanie
  • Śledzenie zdarzeń w Windows
  • Windows Dziennik zdarzeń
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Aby utworzyć dzienniki, rozpoznaj ILogger<TCategoryName> usługę z wstrzykiwania zależności (DI) i wywołaj metody rejestrowania, takie jak LogInformation . Na przykład:

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 rejestrowania, takie LogInformation jak obsługa dowolnej liczby pól. Te pola są często używane do konstruowania komunikatu , ale niektórzy dostawcy rejestrowania wysyłają je do magazynu danych string jako oddzielne pola. Ta funkcja umożliwia dostawcom rejestrowania zaimplementowanie rejestrowania semantycznego, znanego również jako rejestrowanie strukturalne.

Aby uzyskać więcej informacji, zobacz Rejestrowanie na platformie .NET Core i ASP.NET Core.

Routing

Trasa to wzorzec adresu URL zamapowany na program obsługi. Procedura obsługi to zazwyczaj Razor strona, metoda akcji w kontrolerze MVC lub oprogramowanie pośredniczące. ASP.NET Core routing zapewnia kontrolę nad adresami URL używanymi przez aplikację.

Aby uzyskać więcej informacji, zobacz Routing w ASP.NET Core.

Obsługa błędów

ASP.NET Core ma wbudowane funkcje do obsługi błędów, takie jak:

  • Strona wyjątku dewelopera
  • Niestandardowe strony błędów
  • Statyczne strony kodowe stanu
  • Obsługa wyjątków uruchamiania

Aby uzyskać więcej informacji, zobacz Obsługa błędów w ASP.NET Core.

Zgłaszanie żądań HTTP

Implementacja jest IHttpClientFactory dostępna do tworzenia HttpClient wystąpień. Fabryka:

  • Zapewnia centralną lokalizację nazewnictwa i konfigurowania HttpClient wystąpień logicznych. Na przykład zarejestruj i skonfiguruj klienta usługi GitHub w celu uzyskiwania dostępu do GitHub. Zarejestruj i skonfiguruj domyślnego klienta do innych celów.
  • Obsługuje rejestrację i tworzenie łańcuchów wielu programów obsługi delegowania w celu tworzenia potoku oprogramowania pośredniczącego żądań wychodzących. Ten wzorzec jest podobny ASP.NET Core potoku przychodzącego oprogramowania pośredniczącego. Ten wzorzec zapewnia mechanizm zarządzania wszystkimi problemami dla żądań HTTP, w tym buforowaniem, obsługą błędów, serializacją i rejestrowaniem.
  • Integruje się z polly, popularną biblioteką innej firmy do obsługi błędów przejściowych.
  • Zarządza pulą i okresem istnienia bazowych wystąpień, aby uniknąć typowych problemów DNS występujących podczas HttpClientHandler ręcznego HttpClient zarządzania okresami istnienia.
  • Dodaje konfigurowalne środowisko rejestrowania za pośrednictwem ILogger dla wszystkich żądań wysyłanych za pośrednictwem klientów utworzonych przez fabrykę.

Aby uzyskać więcej informacji, zobacz Żądania HTTP przy użyciu IHttpClientFactory w usłudze ASP.NET Core.

Katalog główny zawartości

Katalog główny zawartości jest podstawową ścieżką dla:

  • Plik wykonywalny hostowania aplikacji (.exe).
  • Skompilowane zestawy, które składa się na aplikację (.dll).
  • Pliki zawartości używane przez aplikację, takie jak:
    • Razor files (cshtml, .razor)
    • Pliki konfiguracji (json, .xml)
    • Pliki danych (db)
  • Katalog główny sieciWeb , zazwyczaj folder wwwroot.

Podczas opracowywania główny katalog zawartości jest domyślnie katalogiem głównym projektu. Ten katalog jest również ścieżką podstawową zarówno dla plików zawartości aplikacji, jak i katalogu głównego sieci Web. Określ inny katalog główny zawartości, ustawiając jego ścieżkę podczas budowania hosta. Aby uzyskać więcej informacji, zobacz Content root.

Główny katalog sieci Web

Katalog główny sieci Web jest podstawową ścieżką dla publicznych, statycznych plików zasobów, takich jak:

  • Arkusze stylów (css)
  • JavaScript (.js)
  • Obrazy (.png, .jpg)

Domyślnie pliki statyczne są obsługiwane tylko z głównego katalogu internetowego i jego katalogów podrzędnych. Domyślna ścieżka katalogu głównego sieci Web to {content root}/wwwroot. Określ inny katalog główny sieci Web, ustawiając jego ścieżkę podczas budowania hosta. Aby uzyskać więcej informacji, zobacz Katalog główny sieci Web.

Uniemożliwiaj publikowanie plików w wwwroot <Content> z elementem projektu w pliku projektu. Poniższy przykład uniemożliwia publikowanie zawartości w katalogach wwwroot/local i jego katalogach podrzędnych:

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

W Razor plikach cshtml tylda-ukośnik ( ~/ ) wskazuje katalog główny sieci Web. Ścieżka rozpoczynająca ~/ się od jest nazywana ścieżką wirtualną.

Aby uzyskać więcej informacji, zobacz Pliki statyczne w ASP.NET Core.

Ten artykuł zawiera omówienie kluczowych tematów dotyczących sposobu tworzenia aplikacji ASP.NET Core aplikacji.

Klasa Startup

Klasa Startup to miejsce, w którym:

  • Usługi wymagane przez aplikację są skonfigurowane.
  • Potok obsługi żądań jest zdefiniowany.

Usługi to składniki używane przez aplikację. Na przykład składnik rejestrowania jest usługą. Kod do konfigurowania (lub rejestrowania) usług jest dodawany do Startup.ConfigureServices metody .

Potok obsługi żądań składa się z serii składników oprogramowania pośredniczącego. Na przykład oprogramowanie pośredniczące może obsługiwać żądania dotyczące plików statycznych lub przekierowywać żądania HTTP do protokołu HTTPS. Każde oprogramowanie pośredniczące wykonuje operacje asynchroniczne na a następnie wywołuje następne oprogramowanie pośredniczące w potoku lub HttpContext kończy żądanie. Kod do konfigurowania potoku obsługi żądań jest dodawany do Startup.Configure metody .

Oto przykładowa Startup klasa:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        services.AddDbContext<MovieContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("MovieDb")));
    }

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

Aby uzyskać więcej informacji, zobacz Uruchamianie aplikacji w ASP.NET Core.

Wstrzykiwanie zależności (usługi)

ASP.NET Core ma wbudowaną platformę wstrzykiwania zależności (DI, dependency injection), która udostępnia skonfigurowane usługi klasom aplikacji. Jednym ze sposobów uzyskania wystąpienia usługi w klasie jest utworzenie konstruktora z parametrem wymaganego typu. Parametr może być typem usługi lub interfejsem. System di zapewnia usługę w czasie wykonywania.

Oto klasa, która używa diufikatora do Entity Framework Core obiektu kontekstu. Wyróżniona linia jest przykładem iniekcji konstruktora:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;

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

    // ...

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

Chociaż wtyczka DI jest wbudowana, została zaprojektowana tak, aby umożliwiać podłączenie do kontenera inversion of Control (IoC) innej firmy, jeśli wolisz.

Aby uzyskać więcej informacji, zobacz Wstrzykiwanie zależności w ASP.NET Core.

Oprogramowanie pośredniczące

Potok obsługi żądań składa się z serii składników oprogramowania pośredniczącego. Każdy składnik wykonuje operacje asynchroniczne na a następnie wywołuje następne oprogramowanie pośredniczące w potoku lub HttpContext kończy żądanie.

Zgodnie z konwencją składnik oprogramowania pośredniczącego jest dodawany do potoku przez wywołania jego Use... metody rozszerzenia w metodzie Startup.Configure . Aby na przykład włączyć renderowanie plików statycznych, wywołaj funkcję UseStaticFiles .

Wyróżniony kod w poniższym przykładzie konfiguruje potok obsługi żądań:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        services.AddDbContext<MovieContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("MovieDb")));
    }

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

ASP.NET Core zawiera bogaty zestaw wbudowanego oprogramowania pośredniczącego i można pisać niestandardowe oprogramowanie pośredniczące.

Aby uzyskać więcej informacji, zobacz ASP.NET Core Middleware.

Host

Aplikacja ASP.NET Core tworzy hosta podczas uruchamiania. Host jest obiektem, który hermetyzuje wszystkie zasoby aplikacji, takie jak:

  • Implementacja serwera HTTP
  • Składniki oprogramowania pośredniczącego
  • Rejestrowanie
  • Di
  • Konfigurowanie

Głównym powodem do uwzględnienia wszystkich współzależnych zasobów aplikacji w jednym obiekcie jest zarządzanie okresem istnienia: kontrola nad uruchamianiem aplikacji i graceful shutdown.

Dostępne są dwa hosty: host internetowy i host ogólny. W ASP.NET Core 2.x host ogólny jest tylko dla scenariuszy innych niż sieci Web.

Kod do utworzenia hosta znajduje się Program.Main w :

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

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

Metoda CreateDefaultBuilder konfiguruje hosta przy użyciu często używanych opcji, takich jak następujące:

  • Użyj Kestrel go jako serwera internetowego i włącz integrację usług IIS.
  • Załaduj appsettings.json konfigurację z pliku , appsettings.{ Nazwa środowiska}.json, zmienne środowiskowe, argumenty wiersza polecenia i inne źródła konfiguracji.
  • Wysyłanie danych wyjściowych rejestrowania do konsoli i dostawców debugowania.

Aby uzyskać więcej informacji, zobacz ASP.NET Core Web Host.

Scenariusze inne niż internetowe

Host ogólny umożliwia innym typom aplikacji korzystanie z uniwersalnych rozszerzeń struktury, takich jak rejestrowanie, wstrzykiwanie zależności, konfiguracja i zarządzanie okresem istnienia aplikacji. Aby uzyskać więcej informacji, zobacz Ogólny host .NET w programie ASP.NET Core i Zadania w tle z usługami hostowanych w ASP.NET Core.

Serwery

Aplikacja ASP.NET Core używa implementacji serwera HTTP do nasłuchiwać żądań HTTP. Serwer zwraca żądania do aplikacji jako zestaw funkcji żądań składających się z HttpContext .

ASP.NET Core zawiera następujące implementacje serwera:

  • Kestrel to międzyplatformowy serwer internetowy. KestrelProgram jest często uruchamiany w konfiguracji zwrotnego serwera proxy przy użyciu usług IIS. Kestrel Może być uruchamiany jako publiczny serwer brzegowy, który jest bezpośrednio w Internecie.
  • Serwer HTTP usług IIS to serwer dla systemu Windows, który używa usług IIS. Na tym serwerze aplikacja ASP.NET Core i usługi IIS działają w tym samym procesie.
  • HTTP.sys to serwer dla Windows, który nie jest używany z usługami IIS.

ASP.NET Core zawiera następujące implementacje serwera:

  • Kestrel to międzyplatformowy serwer internetowy. KestrelProgram jest często uruchamiany w konfiguracji zwrotnego serwera proxy przy użyciu usług IIS. Kestrel Może być uruchamiany jako publiczny serwer brzegowy, który jest bezpośrednio w Internecie.
  • HTTP.sys to serwer dla Windows, który nie jest używany z usługami IIS.

Aby uzyskać więcej informacji, zobacz Implementacje serwera sieci Web w ASP.NET Core.

Konfigurowanie

ASP.NET Core udostępnia platformę konfiguracji, która pobiera ustawienia jako pary nazwa-wartość od uporządkowanego zestawu dostawców konfiguracji. Istnieją wbudowane dostawcy konfiguracji dla różnych źródeł, takich jak pliki json, pliki .xml, zmienne środowiskowe i argumenty wiersza polecenia. Można również napisać niestandardowych dostawców konfiguracji.

Można na przykład określić, że konfiguracja pochodzi ze zmiennej appsettings.json środowiskowej i . Następnie, gdy żądana jest wartość ConnectionString, framework najpierw wygląda w appsettings.json pliku . Jeśli wartość zostanie tam znaleziona, ale również w zmiennej środowiskowej, pierwszeństwo będzie miała wartość ze zmiennej środowiskowej .

Do zarządzania poufnymi danymi konfiguracji, takimi jak hasła, program .NET Core udostępnia narzędzie Secret Manager. W przypadku produkcyjnych wpisów tajnych zalecamy Azure Key Vault.

Aby uzyskać więcej informacji, zobacz Konfiguracja w ASP.NET Core.

Opcje

Jeśli to możliwe, ASP.NET Core wzorzec opcji do przechowywania i pobierania wartości konfiguracji. Wzorzec opcji używa klas do reprezentowania grup powiązanych ustawień.

Na przykład poniższy kod ustawia opcje webSocket:

var options = new WebSocketOptions  
{  
   KeepAliveInterval = TimeSpan.FromSeconds(120),  
   ReceiveBufferSize = 4096
};  

app.UseWebSockets(options);

Aby uzyskać więcej informacji, zobacz Wzorzec opcji na platformie ASP.NET Core.

Środowiska

Środowiska wykonawcze, takie jak Development, Staging i Production, to najwyższej klasy ASP.NET Core. Możesz określić środowisko, w którym jest uruchomiona aplikacja, ustawiając zmienną ASPNETCORE_ENVIRONMENT środowiskową. ASP.NET Core odczytuje zmienną środowiskową podczas uruchamiania aplikacji i zapisuje wartość w IHostingEnvironment implementacji. Obiekt środowiska jest dostępny w dowolnym miejscu aplikacji za pośrednictwem di.

Poniższy przykładowy kod klasy konfiguruje aplikację tak, aby dostarczała szczegółowe informacje o błędzie tylko wtedy, Startup gdy jest uruchamiana w programie:

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

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseMvc();
}

Aby uzyskać więcej informacji, zobacz Używanie wielu środowisk na platformie ASP.NET Core.

Rejestrowanie

ASP.NET Core obsługuje interfejs API rejestrowania, który współpracuje z różnymi wbudowanymi i innymi dostawcami rejestrowania. Do dostępnych dostawców należą:

  • Konsola
  • Debugowanie
  • Śledzenie zdarzeń w Windows
  • Windows Dziennik zdarzeń
  • TraceSource
  • Azure App Service
  • Azure Application Insights

Zapisuj dzienniki z dowolnego miejsca w kodzie aplikacji przez pobieranie obiektu z funkcji ILogger DI i wywoływanie metod dziennika.

Oto przykładowy kod, który używa obiektu z wyróżnieniami iniekcji konstruktora i ILogger wywołań metody rejestrowania.

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

Interfejs ILogger umożliwia przekazania dowolnej liczby pól do dostawcy rejestrowania. Pola są często używane do konstruowania ciągu komunikatu, ale dostawca może również wysyłać je jako oddzielne pola do magazynu danych. Ta funkcja umożliwia dostawcom rejestrowania zaimplementowanie rejestrowania semantycznego, znanego również jako rejestrowanie strukturalne.

Aby uzyskać więcej informacji, zobacz Rejestrowanie na platformie .NET Core i ASP.NET Core.

Routing

Trasa to wzorzec adresu URL zamapowany na program obsługi. Procedura obsługi to zazwyczaj Razor strona, metoda akcji w kontrolerze MVC lub oprogramowanie pośredniczące. ASP.NET Core routing zapewnia kontrolę nad adresami URL używanymi przez aplikację.

Aby uzyskać więcej informacji, zobacz Routing w ASP.NET Core.

Obsługa błędów

ASP.NET Core ma wbudowane funkcje do obsługi błędów, takie jak:

  • Strona wyjątku dewelopera
  • Niestandardowe strony błędów
  • Statyczne strony kodowe stanu
  • Obsługa wyjątków uruchamiania

Aby uzyskać więcej informacji, zobacz Obsługa błędów w ASP.NET Core.

Zgłaszanie żądań HTTP

Implementacja jest IHttpClientFactory dostępna do tworzenia HttpClient wystąpień. Fabryka:

  • Zapewnia centralną lokalizację nazewnictwa i konfigurowania HttpClient wystąpień logicznych. Na przykład klienta usługi GitHub można zarejestrować i skonfigurować w celu uzyskania dostępu do GitHub. Domyślny klient można zarejestrować do innych celów.
  • Obsługuje rejestrację i tworzenie łańcuchów wielu programów obsługi delegowania w celu tworzenia potoku oprogramowania pośredniczącego żądań wychodzących. Ten wzorzec jest podobny do potoku przychodzącego oprogramowania pośredniczącego w ASP.NET Core. Ten wzorzec udostępnia mechanizm do zarządzania informacjami o żądaniach HTTP obejmującymi m.in. buforowanie, obsługę błędów, serializację i rejestrowanie.
  • Integruje się z polly— popularną biblioteką innej firmy do obsługi błędów przejściowych.
  • Zarządza pulą i okresem istnienia bazowych wystąpień, aby uniknąć typowych problemów DNS występujących podczas HttpClientHandler ręcznego zarządzania HttpClient okresami istnienia.
  • Dodaje konfigurowalne środowisko rejestrowania (za pośrednictwem ILogger ) dla wszystkich żądań wysyłanych za pośrednictwem klientów utworzonych przez fabrykę.

Aby uzyskać więcej informacji, zobacz Żądania HTTP przy użyciu IHttpClientFactory w usłudze ASP.NET Core.

Główny katalog zawartości

Katalog główny zawartości jest podstawową ścieżką do:

  • Plik wykonywalny hostowania aplikacji (.exe).
  • Skompilowane zestawy, które składa się na aplikację (.dll).
  • Pliki zawartości bez kodu używane przez aplikację, takie jak:
    • Razor files (cshtml, .razor)
    • Pliki konfiguracji (json, .xml)
    • Pliki danych (.db)
  • Główny kataloginternetowy , zazwyczaj opublikowany folder wwwroot.

Podczas opracowywania:

  • Domyślnym katalogiem głównym zawartości jest katalog główny projektu.
  • Katalog główny projektu służy do tworzenia:
    • Ścieżka do plików zawartości bez kodu w katalogu głównym projektu.
    • Katalog głównysieci Web , zazwyczaj folder wwwroot w katalogu głównym projektu.

Alternatywną ścieżkę katalogu głównego zawartości można określić podczas budowania hosta. Aby uzyskać więcej informacji, zobacz ASP.NET Core Web Host.

Główny katalog sieci Web

Katalog główny sieci Web jest podstawową ścieżką do publicznych, niekodowych, statycznych plików zasobów, takich jak:

  • Arkusze stylów (css)
  • JavaScript (.js)
  • Obrazy (.png, .jpg)

Pliki statyczne są domyślnie obsługiwane tylko z głównego katalogu sieci Web (i podkata katalogów).

Domyślna ścieżka katalogu głównego sieci Web to {content root}/wwwroot, ale podczas budowania hosta można określić inny katalog główny sieci Web. Aby uzyskać więcej informacji, zobacz Katalog główny sieci Web.

Zapobiegaj publikowaniu plików w folderze wwwroot <Content> za pomocą elementu projektu w pliku projektu. Poniższy przykład uniemożliwia publikowanie zawartości w katalogu wwwroot/lokalnym i katalogach podrzędnych:

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

W Razor plikach (cshtml) tylda-ukośnik ( ~/ ) wskazuje główny katalog internetowy. Ścieżka rozpoczynająca ~/ się od jest określana jako ścieżka wirtualna.

Aby uzyskać więcej informacji, zobacz Pliki statyczne w ASP.NET Core.