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í:
- Spuštění vlastního skriptu, pokud je zadán parametrem
PRE_BUILD_SCRIPT_PATH
. - Spusťte
dotnet restore
obnovení závislostí NuGet. - Spuštěním sestavte
dotnet publish
binární soubor pro produkční prostředí. - 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
aX-Forwarded-Proto
hlavičky vStartup.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.
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