Sdílet prostřednictvím


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. Modul nasazení služby App Service nejprve nasadí úložiště kódu a pak zkompiluje binární soubory.

Tato příručka obsahuje klíčové koncepty a pokyny pro vývojáře ASP.NET Core. Pokud tento článek používáte službu Azure App Service poprvé, nejprve postupujte podle pokynů k nasazení webové aplikace ASP.NET a nasazení aplikace ASP.NET Core a Azure SQL Database do služby Azure App Service.

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 verze modulu runtime .NET Core a sady SDK, které jsou vám k dispozici, přejděte na svůj web Kudu.

Přejděte do aplikace na webu Azure Portal a pak vyberteRozšířené nástroje>pro vývoj. Vyberte Spustit. V Kudu vyberte konzolu ladění pro CMD nebo PowerShell.

V konzole založené na prohlížeči spusťte následující příkaz:

dotnet --info

Zobrazení verze .NET Core

Pokud chcete zobrazit aktuální verzi .NET Core, spusťte v Azure 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.

Pokud chcete nastavit verzi .NET Core na 8.0, spusťte v Cloud Shellu následující příkaz:

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

Co se stane se zastaralými runtimy ve službě App Service?

Zastaralé moduly runtime jsou zastaralá údržbou organizace nebo mají významná ohrožení zabezpečení. Proto se odeberou z vytváření a konfigurace stránek na portálu. Pokud je zastaralý modul runtime skrytý na portálu, všechny aplikace, které stále používají tento modul runtime, budou dál běžet.

Pokud chcete vytvořit aplikaci se zastaralou verzí modulu runtime, která se už na portálu nezobrazuje, použijte Azure CLI, šablonu ARM nebo Bicep. Tyto alternativy nasazení umožňují vytvářet zastaralé moduly runtime, které se odeberou z portálu, ale stále se podporují.

Pokud je modul runtime plně odebraný z platformy Služby App Service, obdrží vlastník předplatného Azure před odebráním e-mailové oznámení.

Přizpůsobte automatizaci sestavení

Pokud nasadíte aplikaci pomocí balíčků Git nebo ZIP s povolenou automatizací sestavení, automatizace sestavení služby App Service se řídí tímto pořadím:

  1. Spusťte vlastní skript, pokud je určen parametr PRE_BUILD_SCRIPT_PATH.
  2. Pokud chcete obnovit závislosti NuGet, spusťte dotnet restorepříkaz .
  3. Pokud chcete vytvořit binární soubor pro produkční prostředí, spusťte dotnet publishpříkaz .
  4. Spusťte vlastní skript, pokud je určen parametr 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í, které můžete použít k přizpůsobení automatizace sestavení, najdete v tématu Konfigurace Oryx.

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í

Ve službě App Service můžete nastavit nastavení aplikace mimo kód aplikace. K nim pak 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 zároveň v appsettings.json, hodnota služby App Service má přednost před hodnotou appsettings.json. Pomocí místní appsettings.json hodnoty můžete aplikaci ladit místně. Pomocí hodnoty služby App Service můžete aplikaci spustit v produkčním prostředí s produkčním nastavením. Připojovací řetězce fungují stejným způsobem. Pomocí této metody 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:

Můžete také zvážit bezpečnější možnosti připojení, které nevyžadují tajné kódy připojení. 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.

K hierarchickým konfiguračním datům se appsettings.json 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 v App Service, nastavte název nastavení aplikace ve stejném odděleném formátu 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"

K hierarchickým konfiguračním datům se appsettings.json přistupuje pomocí : oddělovače, který je standardem pro .NET Core. Pokud chcete přepsat konkrétní hierarchické nastavení konfigurace v App Service, nastavte název nastavení aplikace ve stejném odděleném formátu v klíči. V Azure 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 vybere projekt, 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 PROJECT můžete určit, který projekt má App Service používat. 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 nabízí integrovaného zprostředkovatele protokolování pro App Service. Do souboru projektu program.cs 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>();
        });

Poté můžete nakonfigurovat a generovat protokoly podle standardního vzoru .NET Core. Viz Logování v .NET Core a ASP.NET Core.

Pokud chcete získat přístup k protokolům konzoly vygenerovaným v 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, Infoa Verbose. Každá další úroveň zahrnuje předchozí úroveň. Například Error obsahuje pouze chybové zprávy. Verbose obsahuje všechny zprávy.

Po zapnutí protokolování diagnostiky spuštěním následujícího příkazu zobrazte stream protokolu:

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

Pokud se protokoly konzoly nezobrazí okamžitě, zkontrolujte to znovu za 30 sekund.

Pokud chcete streamování protokolů kdykoli zastavit, vyberte 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ě Azure App Service a službě IIS.

Přístup ke stránce s podrobnými výjimkami

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. Ve službě App Service nahradí původní stránku obecná zpráva "HTTP 500" nebo "Chyba při zpracování požadavku". Pokud chcete zobrazit podrobnou stránku výjimky ve službě App Service, přidejte nastavení aplikace ASPNETCORE_ENVIRONMENT spuštěním následujícího příkazu v Cloud Shell.

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 v nástrojích pro vyrovnávání zatížení sítě. Všechny požadavky HTTPS se k vaší aplikaci dostanou jako nešifrované požadavky HTTP. Pokud logika aplikace potřebuje vědět, jestli jsou požadavky uživatelů šifrované, nakonfigurujte middleware Forwarded Headers v Startup.cs:

  • Nakonfigurujte middleware tak ForwardedHeadersOptions , aby předával X-Forwarded-For hlavičky a X-Forwarded-Proto hlavičky v Startup.ConfigureServicessouboru .
  • 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.
  • Vyvolejte metodu UseForwardedHeaders v Startup.Configure před voláním ostatních middlewarů.

Když sestavíte tři prvky, váš kód bude vypadat 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řepis adres URL v ASP.NET Core.

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

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

Použijte příkaz az webapp ssh .

Pokud nejste ověřeni, musíte se ověřit ve svém předplatném Azure, abyste se mohli připojit. Po ověření se zobrazí prostředí v prohlížeči, ve kterém můžete spouštět příkazy v kontejneru.

Připojení SSH

Poznámka:

Všechny změny, které uděláte mimo /home adresář, se uloží do samotného kontejneru a nezachovají se za restartováním aplikace.

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í.

Ignorovat zprávu 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. Služba App Service ji používá ke kontrole, jestli kontejner dokáže obsluhovat požadavky. Chybová odpověď 404 značí, že cesta neexistuje, a signalizuje app Service, že kontejner je v pořádku a připravený reagovat na požadavky.