web.config-bestand

Opmerking

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 10-versie van dit artikel voor de huidige release.

Waarschuwing

Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 10-versie van dit artikel voor de huidige release.

De web.config is een bestand dat wordt gelezen door IIS en de ASP.NET Core Module om een app te configureren die wordt gehost met IIS.

web.config bestandslocatie

Als u de ASP.NET Core-module correct wilt instellen, moet het web.config bestand aanwezig zijn op het hoofdpad van de inhoud (meestal het basispad van de app) van de geïmplementeerde app. Dit is dezelfde locatie als het fysieke pad van de website dat aan IIS is verstrekt. Het web.config bestand is vereist in de hoofdmap van de app om het publiceren van meerdere apps met behulp van Web Deploy in te schakelen.

Gevoelige bestanden bestaan op het fysieke pad van de app, zoals {ASSEMBLY}.runtimeconfig.json, {ASSEMBLY}.xml (XML-documentatieopmerkingen) en {ASSEMBLY}.deps.json, waarbij de tijdelijke aanduiding {ASSEMBLY} de assemblynaam is. Wanneer het web.config bestand aanwezig is en de site normaal wordt gestart, worden deze gevoelige bestanden niet door IIS gebruikt als ze worden aangevraagd. Als het web.config bestand ontbreekt, een onjuiste naam heeft of de site niet kan configureren voor normaal opstarten, kan IIS gevoelige bestanden openbaar verwerken.

Het web.config bestand moet altijd aanwezig zijn in de implementatie, correct benoemd en de site kunnen configureren voor normaal opstarten. Verwijder het web.config bestand nooit uit een productie-implementatie.

Als een web.config bestand niet aanwezig is in het project, wordt het bestand gemaakt met het juiste processPath en arguments om de ASP.NET Core-module te configureren en verplaatst naar gepubliceerde uitvoer.

Als een web.config bestand aanwezig is in het project, wordt het bestand getransformeerd met de juiste processPath en arguments om de ASP.NET Core Module te configureren en verplaatst naar gepubliceerde uitvoer. De transformatie wijzigt geen IIS-configuratie-instellingen in het bestand.

Het web.config bestand kan aanvullende IIS-configuratie-instellingen bieden waarmee actieve IIS-modules worden beheren. Zie het artikel IIS-modules voor informatie over IIS-modules die aanvragen kunnen verwerken met ASP.NET Core-apps.

Een MSBuild-doel (_TransformWebConfig) verwerkt het maken, transformeren en publiceren van het web.config bestand wanneer het project wordt gepubliceerd. Dit doel is aanwezig in de Web SDK-doelen (Microsoft.NET.Sdk.Web). De SDK wordt boven aan het projectbestand ingesteld:

<Project Sdk="Microsoft.NET.Sdk.Web">

Als u wilt voorkomen dat de Web SDK het web.config bestand transformeert, gebruikt u de <IsTransformWebConfigDisabled> eigenschap in het projectbestand:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Wanneer u voorkomt dat de web-SDK het bestand transformeert, moet de ontwikkelaar processPath en arguments handmatig instellen. Zie ASP.NET Core Module (ANCM) voor IIS-voor meer informatie.

Configuratie van ASP.NET Core-module met web.config

De ASP.NET Core-module is geconfigureerd met de aspNetCore sectie van het system.webServer knooppunt in het web.config bestand van de site.

Het volgende web.config bestand wordt gepubliceerd voor een frameworkafhankelijke implementatie en configureert de ASP.NET Core-module voor het afhandelen van siteaanvragen:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet"
                  arguments=".\MyApp.dll"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

Het volgende web.config wordt gepubliceerd voor een zelfstandige implementatie:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApp.exe"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

De InheritInChildApplications eigenschap is zo ingesteld false dat de instellingen die zijn opgegeven in het <location> element, niet worden overgenomen door apps die zich in een submap van de app bevinden.

Wanneer een app wordt geïmplementeerd in Azure App Service, wordt het stdoutLogFile pad ingesteld op \\?\%home%\LogFiles\stdout. Het pad slaat stdout-logboeken op in de LogFiles map, wat een locatie is die automatisch door de dienst wordt aangemaakt.

Zie Geavanceerde configuratie voor informatie over configuratie van IIS-subtoepassingen.

Kenmerken van het aspNetCore element

Attribute Description Verstek
arguments

Optioneel tekenreekskenmerk.

Argumenten voor het uitvoerbare bestand dat is opgegeven in processPath.

disableStartUpErrorPage

Optioneel Booleaanse kenmerk.

Indien waar, wordt de pagina 502.5 - Procesfout onderdrukt en heeft de 502-statuscodepagina die is geconfigureerd in de web.config statuscode voorrang.

false
forwardWindowsAuthToken

Optioneel Booleaanse kenmerk.

Zo ja, wordt het token doorgestuurd naar het onderliggende proces dat op %ASPNETCORE_PORT% luistert als een header 'MS-ASPNETCORE-WINAUTHTOKEN' bij elke aanvraag. Het is de verantwoordelijkheid van dat proces om per aanvraag CloseHandle aan te roepen op dit token.

true
hostingModel

Optioneel tekenreekskenmerk.

Hiermee specificeert u het hostingmodel als in-process (InProcess/inprocess) of out-of-process (OutOfProcess/outofprocess).

OutOfProcess / outofprocess indien niet aanwezig
processesPerApplication

Optioneel integer-attribuut.

Hiermee specificeert u het aantal exemplaren van het proces, zoals gespecificeerd in de processPath instelling, dat per app kan worden opgestart.

†Voor in-process hosting is de waarde beperkt tot 1.

Instelling processesPerApplication wordt afgeraden. Dit kenmerk wordt verwijderd in een toekomstige release.

Standaardwaarde: 1
Min: 1
Max: 100
processPath

Vereist tekenreekskenmerk.

Pad naar het uitvoerbare bestand dat een proces start dat luistert naar HTTP-aanvragen. Relatieve paden worden ondersteund. Als het pad begint met ., wordt het pad beschouwd als relatief ten opzichte van de hoofdmap van de site.

rapidFailsPerMinute

Optioneel integer-attribuut.

Hiermee geeft u het aantal keren op dat het opgegeven proces processPath per minuut mag crashen. Als deze limiet wordt overschreden, stopt de module met het starten van het proces voor de rest van de minuut.

Niet ondersteund met in-process hosting.

Standaardwaarde: 10
Min: 0
Max: 100
requestTimeout

Optioneel tijdspannekenmerk.

Hiermee geeft u de duur op waarvoor de ASP.NET Core Module wacht op een reactie van het proces dat luistert op %ASPNETCORE_PORT%.

In versies van de ASP.NET Core-module die is geleverd met de release van ASP.NET Core 2.1 of hoger, wordt de requestTimeout module opgegeven in uren, minuten en seconden.

Is niet van toepassing op in-process hosting. Voor in-process hosting wacht de module totdat de app de aanvraag verwerkt.

Geldige waarden voor de minuten- en secondensegementen van de tekenreeks bevinden zich in het bereik van 0-59. Het gebruik van 60 in de waarde voor minuten of seconden resulteert in een fout van 500 - Interne server.

Standaardwaarde: 00:02:00
Min: 00:00:00
Max: 360:00:00
shutdownTimeLimit

Optioneel integer-attribuut.

De duur in seconden dat de module wacht totdat het uitvoerbare bestand netjes wordt afgesloten zodra het app_offline.htm bestand wordt gedetecteerd.

Standaardwaarde: 10
Min: 0
Max: 600
startupTimeLimit

Optioneel integer-attribuut.

De duur in seconden dat de module wacht tot het uitvoerbare bestand een proces start dat op de poort luistert. Als deze tijdslimiet wordt overschreden, wordt het proces door de module uitgeschakeld.

Tijdens het hosten in-process: het proces wordt niet opnieuw gestart en gebruikt de instellingrapidFailsPerMinute.

Bij het hosten van een out-of-process: de module probeert het proces opnieuw te starten wanneer er een nieuwe aanvraag wordt ontvangen. Het blijft proberen het proces opnieuw te starten voor volgende binnenkomende aanvragen, tenzij de app het aantal keren dat het niet is opgestart in de laatste roterende minuut rapidFailsPerMinute heeft bereikt.

Een waarde van 0 (nul) wordt niet beschouwd als een oneindige time-out.

Standaardwaarde: 120
Min: 0
Max: 3600
stdoutLogEnabled

Optioneel Booleaanse kenmerk.

Als waar, worden stdout en stderr voor het proces dat is opgegeven in processPath omgeleid naar het bestand dat is opgegeven in stdoutLogFile.

false
stdoutLogFile

Optioneel tekenreekskenmerk.

Hiermee geeft u het relatieve of absolute bestandspad waarvoor stdout en stderr van het opgegeven processPath proces worden geregistreerd. Relatieve paden zijn relatief ten opzichte van de hoofdmap van de site. Elk pad dat begint met . is relatief ten opzichte van de hoofdmap van de site en alle andere paden worden beschouwd als absolute paden. De module maakt mappen die in het pad worden opgegeven wanneer het logboekbestand wordt gemaakt. Met onderstrepingstekens worden een tijdstempel, proces-id en bestandsextensie (.log) toegevoegd aan het laatste segment van het stdoutLogFile pad. Als .\logs\stdout een waarde wordt opgegeven, wordt een voorbeeldlogboek stdout opgeslagen als stdout_20180205194132_1934.log in de logs map wanneer het is opgeslagen op 5 februari 2018 om 19:41:32 met een proces-id van 1934.

aspnetcore-stdout

Omgevingsvariabelen instellen

Omgevingsvariabelen kunnen worden opgegeven voor het proces in het processPath kenmerk. Geef een omgevingsvariabele op met het <environmentVariable> onderliggende element van een <environmentVariables> verzamelingselement. Omgevingsvariabelen die in deze sectie zijn ingesteld, hebben voorrang op omgevingsvariabelen van het systeem.

In het volgende voorbeeld worden twee omgevingsvariabelen ingesteld in web.config. ASPNETCORE_ENVIRONMENT hiermee configureert u de omgeving van de app in Development. Een ontwikkelaar kan deze waarde tijdelijk instellen in het web.config bestand om af te dwingen dat de uitzonderingspagina voor ontwikkelaars wordt geladen bij het opsporen van fouten in een app-uitzondering. CONFIG_DIR is een voorbeeld van een door de gebruiker gedefinieerde omgevingsvariabele, waarbij de ontwikkelaar code heeft geschreven waarmee de waarde bij het opstarten wordt gelezen om een pad te vormen voor het laden van het configuratiebestand van de app.

<aspNetCore processPath="dotnet"
      arguments=".\MyApp.dll"
      stdoutLogEnabled="false"
      stdoutLogFile=".\logs\stdout"
      hostingModel="inprocess">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    <environmentVariable name="CONFIG_DIR" value="f:\application_config" />
  </environmentVariables>
</aspNetCore>

Opmerking

Een alternatief voor het rechtstreeks instellen van de omgeving in web.config is het opnemen van de <EnvironmentName> eigenschap in het publicatieprofiel (.pubxml) of projectbestand. Met deze benadering wordt de omgeving web.config ingesteld wanneer het project wordt gepubliceerd.

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

Waarschuwing

Stel de ASPNETCORE_ENVIRONMENT omgevingsvariabele Development alleen in op faserings- en testservers die niet toegankelijk zijn voor niet-vertrouwde netwerken, zoals internet.

Configuratie van IIS met web.config

IIS-configuratie wordt beïnvloed door de <system.webServer> sectie van web.config IIS-scenario's die functioneel zijn voor ASP.NET Core-apps met de ASP.NET Core-module. IIS-configuratie is bijvoorbeeld functioneel voor dynamische compressie. Als IIS is geconfigureerd op serverniveau om dynamische compressie te gebruiken, kan het <urlCompression> element in het bestand van web.config de app dit uitschakelen voor een ASP.NET Core-app.

Zie de volgende artikelen voor meer informatie:

Als u omgevingsvariabelen wilt instellen voor afzonderlijke apps die worden uitgevoerd in geïsoleerde app-pools (ondersteund voor IIS 10.0 of hoger), raadpleegt u de AppCmd.exe opdrachtsectie van het artikel Omgevingsvariabelen <environmentVariables> in de IIS-referentiedocumentatie.

Configuratiesecties van web.config

Configuratiesecties van ASP.NET 4.x-apps in web.config worden niet gebruikt door ASP.NET Core-apps voor configuratie.

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

ASP.NET Core-apps zijn geconfigureerd met andere configuratieproviders. Zie Configuratie voor meer informatie.

Transformeer web.config

Zie web.config als u wilt transformeren bij het publiceren. Mogelijk moet u web.config transformeren bij het publiceren om omgevingsvariabelen in te stellen op basis van de configuratie, het profiel of de omgeving.

Aanvullende bronnen