Konfigurace aplikace ASP.NET Core pro službu Azure App Service

Poznámka:

Informace o ASP.NET v rozhraní .NET Framework najdete v tématu Konfigurace aplikace ASP.NET pro službu Aplikace Azure Service. Pokud vaše aplikace ASP.NET Core běží ve vlastním kontejneru pro Windows nebo Linux, přečtěte si téma Konfigurace vlastního kontejneru pro službu Aplikace Azure Service.

ASP.NET základní aplikace musí být nasazeny do služby Aplikace Azure Service jako kompilované binární soubory. Nástroj pro publikování sady Visual Studio sestaví řešení a pak nasadí kompilované binární soubory přímo, zatímco modul nasazení služby App Service nasadí úložiště kódu nejprve a potom binární soubory zkompiluje.

Tato příručka obsahuje klíčové koncepty a pokyny pro vývojáře ASP.NET Core. Pokud jste službu Aplikace Azure Nikdy nepoužívali, nejprve postupujte podle kurzu rychlý start k ASP.NET Core a ASP.NET Core s SQL Database.

Zobrazení podporovaných verzí modulu runtime .NET Core

Ve službě App Service už mají instance Windows nainstalované všechny podporované verze .NET Core. Pokud chcete zobrazit dostupné verze modulu runtime .NET Core a sady SDK, přejděte do https://<app-name>.scm.azurewebsites.net/DebugConsole konzoly založené na prohlížeči a spusťte následující příkaz:

dotnet --info

Zobrazení verze .NET Core

Pokud chcete zobrazit aktuální verzi .NET Core, spusťte v Cloud Shellu následující příkaz:

az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion

Pokud chcete zobrazit všechny podporované verze .NET Core, spusťte v Cloud Shellu následující příkaz:

az webapp list-runtimes --os linux | grep DOTNET

Nastavení verze .NET Core

Nastavte cílovou architekturu v souboru projektu pro váš projekt ASP.NET Core. Další informace najdete v tématu Výběr verze .NET Core, která se má použít v dokumentaci k .NET Core.

Spuštěním následujícího příkazu v Cloud Shellu nastavte verzi .NET Core na 8.0:

az webapp config set --name <app-name> --resource-group <resource-group-name> --linux-fx-version "DOTNETCORE|8.0"

Přizpůsobení automatizace sestavení

Poznámka:

Vytváření aplikací .NET 9 (STS) se službou Windows App Service pomocí nástroje MSBuild nebo SCM_DO_BUILD se zatím nepodporuje. Podpora těchto scénářů sestavení bude po počátečním datu ga a do 4. prosince 2024. Nasazení, která se sestavují mimo službu App Service prostřednictvím sady Visual Studio, Visual Studio Code, GitHub Actions a Azure DevOps, jsou plně podporovaná.

Pokud nasadíte aplikaci pomocí Gitu nebo balíčků ZIP s povolenou automatizací sestavení, provede se automatizace sestavení služby App Service pomocí následujícího pořadí:

  1. Spuštění vlastního skriptu, pokud je zadán parametrem PRE_BUILD_SCRIPT_PATH.
  2. Spusťte dotnet restore obnovení závislostí NuGet.
  3. Spuštěním sestavte dotnet publish binární soubor pro produkční prostředí.
  4. Spuštění vlastního skriptu, pokud je zadán parametrem POST_BUILD_SCRIPT_PATH.

PRE_BUILD_COMMAND a POST_BUILD_COMMAND jsou proměnné prostředí, které jsou ve výchozím nastavení prázdné. Chcete-li spustit příkazy prebuild, definujte PRE_BUILD_COMMAND. Chcete-li spustit příkazy po sestavení, definujte POST_BUILD_COMMAND.

Následující příklad určuje dvě proměnné pro řadu příkazů oddělených čárkami.

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PRE_BUILD_COMMAND="echo foo, scripts/prebuild.sh"
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings POST_BUILD_COMMAND="echo foo, scripts/postbuild.sh"

Další proměnné prostředí pro přizpůsobení automatizace sestavení najdete v tématu Konfigurace Oryxu.

Další informace o tom, jak App Service běží a vytváří aplikace ASP.NET Core v Linuxu, najdete v dokumentaci k Oryxu: Jak se aplikace .NET Core detekují a sestavují.

Přístup k proměnným prostředí

V App Service můžete nastavit nastavení aplikace mimo kód vaší aplikace. Pak k nim můžete přistupovat v libovolné třídě pomocí standardního vzoru injektáže závislostí ASP.NET Core:

using Microsoft.Extensions.Configuration;

namespace SomeNamespace 
{
    public class SomeClass
    {
        private IConfiguration _configuration;
    
        public SomeClass(IConfiguration configuration)
        {
            _configuration = configuration;
        }
    
        public SomeMethod()
        {
            // retrieve nested App Service app setting
            var myHierarchicalConfig = _configuration["My:Hierarchical:Config:Data"];
            // retrieve App Service connection string
            var myConnString = _configuration.GetConnectionString("MyDbConnection");
        }
    }
}

Pokud nakonfigurujete nastavení aplikace se stejným názvem ve službě App Service a v appsettings.json, má například hodnota služby App Service přednost před hodnotou appsettings.json . Místní hodnota appsettings.json umožňuje ladit aplikaci místně, ale hodnota služby App Service umožňuje spustit aplikaci v produkčním prostředí s produkčním nastavením. Připojovací řetězce fungují stejným způsobem. Tímto způsobem můžete tajné kódy aplikace uchovávat mimo úložiště kódu a přistupovat k příslušným hodnotám beze změny kódu.

Poznámka:

Zvažte bezpečnější možnosti připojení, které nevyžadují tajné kódy připojení vůbec. Další informace najdete v tématu Zabezpečené připojení ke službám a databázím Azure ze služby Aplikace Azure Service.

Poznámka:

Všimněte si, že k hierarchickým konfiguračním datům v appsettings.json se přistupuje pomocí __ oddělovače (dvojité podtržítko), který je standardní v Linuxu na .NET Core. Pokud chcete přepsat konkrétní hierarchické nastavení konfigurace ve službě App Service, nastavte název nastavení aplikace se stejným formátem odděleným v klíči. V Cloud Shellu můžete spustit následující příklad:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My__Hierarchical__Config__Data="some value"

Poznámka:

Všimněte si, že k hierarchickým konfiguračním datům v appsettings.json se přistupuje pomocí : oddělovače, který je standardem pro .NET Core. Pokud chcete přepsat konkrétní hierarchické nastavení konfigurace ve službě App Service, nastavte název nastavení aplikace se stejným formátem odděleným v klíči. V Cloud Shellu můžete spustit následující příklad:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My:Hierarchical:Config:Data="some value"

Nasazení řešení s více projekty

Pokud řešení sady Visual Studio obsahuje více projektů, proces publikování sady Visual Studio už zahrnuje výběr projektu, který se má nasadit. Když nasadíte do modulu nasazení služby App Service, například s Gitem nebo s nasazením ZIP s povolenou automatizací sestavení, modul nasazení služby App Service vybere první web nebo projekt webové aplikace, který najde jako aplikaci App Service. Zadáním nastavení aplikace můžete určit, který projekt má app Service používat PROJECT . Spusťte například v Cloud Shellu následující příkaz:

az webapp config appsettings set --resource-group <resource-group-name> --name <app-name> --settings PROJECT="<project-name>/<project-name>.csproj"

Přístup k diagnostickým protokolům

ASP.NET Core poskytuje integrovaného zprostředkovatele protokolování pro App Service. V Program.cs projektu přidejte zprostředkovatele do aplikace prostřednictvím ConfigureLogging metody rozšíření, jak je znázorněno v následujícím příkladu:

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

Pak můžete nakonfigurovat a generovat protokoly pomocí standardního vzoru .NET Core.

Pokud chcete získat přístup k protokolům konzoly vygenerovaným v rámci kódu aplikace ve službě App Service, zapněte protokolování diagnostiky spuštěním následujícího příkazu v Cloud Shellu:

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

Možné hodnoty pro --level jsou: Error, Warning, Info a Verbose. Každá další úroveň zahrnuje předchozí úroveň. Například Error zahrnuje jenom chybové zprávy a Verbose zahrnuje všechny zprávy.

Jakmile je aktivované protokolování diagnostiky, spusťte následující příkaz pro zobrazení streamu protokolů:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.

Poznámka:

Soubory protokolu můžete také zkontrolovat v prohlížeči na https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Streamování protokolů můžete kdykoli zastavit zadáním Ctrl+C.

Další informace o řešení potíží s aplikacemi ASP.NET Core ve službě App Service najdete v tématu Řešení potíží ASP.NET Core ve službě Aplikace Azure a službě IIS.

Získání podrobné stránky výjimky

Když vaše aplikace ASP.NET Core vygeneruje výjimku v ladicím programu sady Visual Studio, zobrazí se v prohlížeči podrobná stránka výjimky, ale tato stránka se nahradí obecnou chybou HTTP 500 nebo Došlo k chybě při zpracování požadavku. Pokud chcete zobrazit podrobnou stránku výjimky ve službě App Service, přidejte ASPNETCORE_ENVIRONMENT do aplikace nastavení aplikace spuštěním následujícího příkazu v Cloud Shellu.

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings ASPNETCORE_ENVIRONMENT="Development"

Zjištění relace HTTPS

Ve službě App Service dochází k ukončení protokolu TLS/SSL v nástrojích pro vyrovnávání zatížení sítě, takže všechny požadavky HTTPS dosáhnou vaší aplikace jako nešifrované požadavky HTTP. Pokud logika vaší aplikace potřebuje vědět, jestli jsou požadavky uživatelů zašifrované nebo ne, nakonfigurujte middleware předávané hlavičky v Startup.cs:

  • Nakonfigurujte middleware s forwardedHeadersOptions pro přesměrování X-Forwarded-For a X-Forwarded-Proto hlavičky v Startup.ConfigureServices.
  • Přidejte do známých sítí rozsahy privátních IP adres, aby middleware mohl důvěřovat nástroji pro vyrovnávání zatížení služby App Service.
  • Před voláním jiného middlewaru vyvoláte metodu Startup.Configure UseForwardedHeaders.

Seskupování všech tří prvků vypadá jako v následujícím příkladu:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders =
            ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        // These three subnets encapsulate the applicable Azure subnets. At the moment, it's not possible to narrow it down further.
        options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:10.0.0.0"), 104));
        options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:192.168.0.0"), 112));
        options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:172.16.0.0"), 108));
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseForwardedHeaders();

    ...

    app.UseMvc();
}

Další informace najdete v tématu Konfigurace ASP.NET Core pro práci s proxy servery a nástroji pro vyrovnávání zatížení.

Přepsání nebo přesměrování adresy URL

Pokud chcete přepsat nebo přesměrovat adresu URL, použijte middleware pro přepsání adresy URL v ASP.NET Core.

Otevření relace SSH v prohlížeči

Pokud chcete otevřít přímou relaci SSH s kontejnerem, vaše aplikace by měla být spuštěná.

Vložte následující adresu URL do vašeho prohlížeče a <app-name> nahraďte názvem vaší aplikace:

https://<app-name>.scm.azurewebsites.net/webssh/host

Pokud ještě nejste ověření, budete se muset ověřit s vaším předplatným Azure, abyste se mohli připojit. Po ověření se vám zobrazí prostředí prohlížeče, ve kterém můžete spouště příkazy uvnitř vašeho kontejneru.

Připojení SSH

Poznámka:

Všechny změny provedené mimo adresář /home se uloží ve vlastním kontejneru a po restartování aplikace se neuchovají.

Pokud chcete otevřít vzdálenou relaci SSH z místního počítače, projděte si téma věnované otevření relace SSH ze vzdáleného prostředí.

robots933456 v protokolech

V protokolech kontejneru se může zobrazit následující zpráva:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

Tuto zprávu klidně ignorujte. /robots933456.txt je fiktivní cesta URL, kterou App Service používá ke kontrole, jestli kontejner dokáže obsloužit požadavky. Odpověď 404 jednoduše indikuje, že příslušná cesta neexistuje, ale dá službě App Service vědět, že kontejner je v pořádku a je připravený reagovat na požadavky.

Další kroky

Nebo se podívejte na další zdroje informací:

Referenční informace k proměnným prostředí a nastavením aplikace