Een ASP.NET Core-app configureren voor Azure App Service
Notitie
Zie Een ASP.NET-app configureren voor Azure-app Service voor ASP.NET in .NET Framework. Als uw ASP.NET Core-app wordt uitgevoerd in een aangepaste Windows- of Linux-container, raadpleegt u Een aangepaste container configureren voor Azure-app Service.
ASP.NET Core-apps moeten worden geïmplementeerd in Azure-app Service als gecompileerde binaire bestanden. Het Visual Studio-publicatieprogramma bouwt de oplossing en implementeert vervolgens de gecompileerde binaire bestanden rechtstreeks, terwijl de App Service-implementatie-engine eerst de codeopslagplaats implementeert en vervolgens de binaire bestanden compileert.
Deze handleiding bevat belangrijke concepten en instructies voor ASP.NET Core-ontwikkelaars. Als u Azure-app Service nog nooit hebt gebruikt, volgt u eerst de quickstart ASP.NET Core en ASP.NET Core met SQL Database.
Ondersteunde .NET Core-runtimeversies weergeven
In App Service hebben de Windows-exemplaren al alle ondersteunde .NET Core-versies geïnstalleerd. Als u de .NET Core Runtime- en SDK-versies wilt weergeven die voor u beschikbaar zijn, gaat u naar https://<app-name>.scm.azurewebsites.net/DebugConsole
en voert u de volgende opdracht uit in de browserconsole:
dotnet --info
Versie van .NET Core weergeven
Als u de huidige .NET Core-versie wilt weergeven, voert u de volgende opdracht uit in Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Als u alle ondersteunde .NET Core-versies wilt weergeven, voert u de volgende opdracht uit in de Cloud Shell:
az webapp list-runtimes --os linux | grep DOTNET
Versie van .NET Core instellen
Stel het doelframework in het projectbestand in voor uw ASP.NET Core-project. Zie De .NET Core-versie selecteren die u wilt gebruiken in .NET Core-documentatie voor meer informatie.
Voer de volgende opdracht uit in Cloud Shell om de .NET Core-versie in te stellen op 8.0:
az webapp config set --name <app-name> --resource-group <resource-group-name> --linux-fx-version "DOTNETCORE|8.0"
De automatisering van bouwbewerkingen aanpassen
Notitie
Het bouwen van STS-apps (.NET 9) met Windows App Service met behulp van MSBuild of SCM_DO_BUILD wordt nog niet ondersteund. Ondersteuning voor deze buildscenario's wordt geleverd na de eerste GA-datum en op 4 december 2024. Implementaties die buiten App Service bouwen via Visual Studio, Visual Studio Code, GitHub Actions en Azure DevOps, worden volledig ondersteund.
Als u uw app implementeert met Git of zip-pakketten waarvoor buildautomatisering is ingeschakeld, doorloopt de App Service-buildautomatisering de volgende reeks:
- Voer aangepast script uit als dit is opgegeven door
PRE_BUILD_SCRIPT_PATH
. - Voer deze opdracht uit
dotnet restore
om NuGet-afhankelijkheden te herstellen. - Uitvoeren
dotnet publish
om een binair bestand te bouwen voor productie. - Voer aangepast script uit als dit is opgegeven door
POST_BUILD_SCRIPT_PATH
.
PRE_BUILD_COMMAND
en POST_BUILD_COMMAND
zijn omgevingsvariabelen die standaard leeg zijn. Als u prebuild-opdrachten wilt uitvoeren, definieert u PRE_BUILD_COMMAND
. Als u achteraf gebouwde opdrachten wilt uitvoeren, definieert u POST_BUILD_COMMAND
.
In het volgende voorbeeld worden de twee variabelen voor een reeks opdrachten opgegeven, gescheiden door komma's.
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"
Zie Oryx-configuratie voor andere omgevingsvariabelen voor het aanpassen van buildautomatisering.
Toegang tot omgevingsvariabelen
In App Service kunt u app-instellingen configureren buiten uw app-code. Vervolgens kunt u ze in elke klasse openen met behulp van het standaardpatroon ASP.NET Core-afhankelijkheidsinjectie:
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");
}
}
}
Als u een app-instelling configureert met dezelfde naam in App Service en in appsettings.json, heeft de App Service-waarde bijvoorbeeld voorrang op de appsettings.json waarde. Met de lokale appsettings.json-waarde kunt u lokaal fouten opsporen in de app, maar met de App Service-waarde kunt u de app uitvoeren in productie met productie-instellingen. Verbindingsreeksen werken op dezelfde manier. Op deze manier kunt u uw toepassingsgeheimen buiten uw codeopslagplaats bewaren en toegang krijgen tot de juiste waarden zonder uw code te wijzigen.
Notitie
Overweeg veiligere connectiviteitsopties die helemaal geen verbindingsgeheimen vereisen. Zie Secure connectivity to Azure services and databases from Azure-app Service (Beveiligde connectiviteit met Azure-services en -databases) voor meer informatie.
Notitie
Let op de hiërarchische configuratiegegevens in appsettings.json worden geopend met behulp van het __
(dubbele onderstrepingsteken) scheidingsteken dat standaard is op Linux naar .NET Core. Als u een specifieke hiërarchische configuratie-instelling in App Service wilt overschrijven, stelt u de naam van de app-instelling in met dezelfde indeling met scheidingstekens in de sleutel. u kunt het volgende voorbeeld uitvoeren in Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My__Hierarchical__Config__Data="some value"
Notitie
Let op de hiërarchische configuratiegegevens in appsettings.json worden geopend met behulp van het :
scheidingsteken dat standaard is voor .NET Core. Als u een specifieke hiërarchische configuratie-instelling in App Service wilt overschrijven, stelt u de naam van de app-instelling in met dezelfde indeling met scheidingstekens in de sleutel. u kunt het volgende voorbeeld uitvoeren in Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My:Hierarchical:Config:Data="some value"
Oplossingen voor meerdere projecten implementeren
Wanneer een Visual Studio-oplossing meerdere projecten bevat, omvat het publicatieproces van Visual Studio al het te implementeren project. Wanneer u implementeert in de App Service-implementatie-engine, zoals met Git of met ZIP-implementatie waarvoor buildautomatisering is ingeschakeld, kiest de App Service-implementatie-engine de eerste website of het webtoepassingsproject dat wordt gevonden als de App Service-app. U kunt opgeven welk project App Service moet gebruiken door de PROJECT
app-instelling op te geven. Voer bijvoorbeeld de volgende opdracht uit in Cloud Shell:
az webapp config appsettings set --resource-group <resource-group-name> --name <app-name> --settings PROJECT="<project-name>/<project-name>.csproj"
Toegang tot diagnostische logboeken
ASP.NET Core biedt een ingebouwde provider voor logboekregistratie voor App Service. Voeg in Program.cs van uw project de provider toe aan uw toepassing via de ConfigureLogging
extensiemethode, zoals wordt weergegeven in het volgende voorbeeld:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddAzureWebAppDiagnostics();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Vervolgens kunt u logboeken configureren en genereren met het standaard .NET Core-patroon.
Als u toegang wilt tot de consolelogboeken die worden gegenereerd binnen uw toepassingscode in de App Service, schakelt u diagnostische logboekregistratie in door de volgende opdracht in de Cloud Shell uit te voeren:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Mogelijk waarden voor --level
zijn: Error
, Warning
, Info
en Verbose
. Elk hoger niveau omvat het vorige niveau. Bijvoorbeeld: Error
omvat alleen foutberichten en Verbose
omvat alle berichten.
Nadat diagnostische logboekregistratie is ingeschakeld, voert u de volgende opdracht uit om de logboekstream te zien:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Als u de consolelogboeken niet meteen ziet, probeert u het opnieuw na 30 seconden.
Notitie
U kunt ook de logboekbestanden van de browser inspecteren op https://<app-name>.scm.azurewebsites.net/api/logs/docker
.
U kunt op elk gewenst moment Ctrl
+C
typen om te stoppen met logboekstreaming.
Pagina met gedetailleerde uitzonderingen ophalen
Wanneer uw ASP.NET Core-app een uitzondering genereert in het foutopsporingsprogramma van Visual Studio, wordt in de browser een gedetailleerde uitzonderingspagina weergegeven, maar in App Service wordt deze pagina vervangen door een algemene HTTP 500 of er is een fout opgetreden tijdens het verwerken van uw aanvraag. Als u de gedetailleerde uitzonderingspagina in App Service wilt weergeven, voegt u de ASPNETCORE_ENVIRONMENT
app-instelling toe aan uw app door de volgende opdracht uit te voeren in Cloud Shell.
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings ASPNETCORE_ENVIRONMENT="Development"
HTTPS-sessie detecteren
In App Service vindt TLS/SSL-beëindiging plaats bij de netwerktaakverdelers, zodat alle HTTPS-aanvragen uw app bereiken als niet-versleutelde HTTP-aanvragen. Als uw app-logica moet weten of de gebruikersaanvragen zijn versleuteld of niet, configureert u de Doorgeschakelde headers Middleware in Startup.cs:
- Configureer de middleware met ForwardedHeadersOptions om de
X-Forwarded-For
enX-Forwarded-Proto
headers door te sturen inStartup.ConfigureServices
. - Voeg privé-IP-adresbereiken toe aan de bekende netwerken, zodat de middleware de Load Balancer van App Service kan vertrouwen.
- Roep de methode UseForwardedHeaders aan
Startup.Configure
voordat u andere middleware aanroept.
Als u alle drie de elementen samenbrengt, ziet uw code eruit als in het volgende voorbeeld:
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();
}
Zie ASP.NET Core configureren voor gebruik met proxyservers en load balancers voor meer informatie.
URL herschrijven of omleiden
Als u de URL wilt herschrijven of omleiden, gebruikt u de middleware voor het herschrijven van de URL in ASP.NET Core.
SSH-sessie in de browser openen
Als u een directe SSH-sessie opent met uw container, moet uw app worden uitgevoerd.
Plak de volgende URL in uw browser en vervang <app-name>
door de naam van uw app:
https://<app-name>.scm.azurewebsites.net/webssh/host
Als u nog niet bent geverifieerd moet u zich verifiëren met uw Azure-abonnement om verbinding te maken. Nadat u bent geverifieerd, ziet u een shell in de browser waarin u opdrachten binnen uw container kunt uitvoeren.
Notitie
Wijzigingen die u buiten de map /home aanbrengt, worden in de container zelf opgeslagen en blijven niet behouden na het opnieuw opstarten van de app.
Als u een externe SSH-sessie wilt openen vanaf uw lokale machine, raadpleegt u SSH-sessie openen vanaf een externe shell.
robots933456 in logboeken
U ziet mogelijk het volgende bericht in de containerlogboeken:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
U kunt dit bericht veilig negeren. /robots933456.txt
is een dummy-URL-pad dat App Service gebruikt om te controleren of de container aanvragen kan verwerken. Een 404-antwoord geeft alleen aan dat het pad niet bestaat, maar laat App Service wel weten dat de container in orde is en klaar is om te reageren op aanvragen.
Volgende stappen
Of bekijk meer resources:
Naslaginformatie over omgevingsvariabelen en app-instellingen