ASP.NET Core Module configuration reference
By Luke Latham, Rick Anderson, and Sourabh Shirhatti
This document provides details on how to configure the ASP.NET Core Module for hosting ASP.NET Core applications. For an introduction to the ASP.NET Core Module and installation instructions, see the ASP.NET Core Module overview.
Configuration via web.config
The ASP.NET Core Module is configured via a site or application web.config file and has its own aspNetCore
configuration section within system.webServer
. Here's an example web.config file that the Microsoft.NET.Sdk.Web
SDK will provide when the project is published for a framework-dependent deployment with placeholders for the processPath
and arguments
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%"
arguments="%LAUNCHER_ARGS%"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
The web.config example below is for a self-contained deployment to the Azure App Service. For more information, see Publishing to IIS. See Configuration of sub-applications for an important note pertaining to the configuration of web.config files in sub-applications.
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\MyApp.exe"
stdoutLogEnabled="false"
stdoutLogFile="\\?\%home%\LogFiles\stdout" />
</system.webServer>
</configuration>
Attributes of the aspNetCore element
Attribute | Description |
---|---|
processPath | Required string attribute. Path to the executable that will launch a process listening for HTTP requests. Relative paths are supported. If the path begins with '.', the path is considered to be relative to the site root. There is no default value. |
arguments | Optional string attribute. Arguments to the executable specified in processPath. The default value is an empty string. |
startupTimeLimit | Optional integer attribute. Duration in seconds that the module will wait for the executable to start a process listening on the port. If this time limit is exceeded, the module will kill the process. The module will attempt to launch the process again when it receives a new request and will continue to attempt to restart the process on subsequent incoming requests unless the application fails to start rapidFailsPerMinute number of times in the last rolling minute. The default value is 120. |
shutdownTimeLimit | Optional integer attribute. Duration in seconds for which the module will wait for the executable to gracefully shutdown when the app_offline.htm file is detected. The default value is 10. |
rapidFailsPerMinute | Optional integer attribute. Specifies the number of times the process specified in processPath is allowed to crash per minute. If this limit is exceeded, the module will stop launching the process for the remainder of the minute. The default value is 10. |
requestTimeout | Optional timespan attribute. Specifies the duration for which the ASP.NET Core Module will wait for a response from the process listening on %ASPNETCORE_PORT%. The default value is "00:02:00". |
stdoutLogEnabled | Optional Boolean attribute. If true, stdout and stderr for the process specified in processPath will be redirected to the file specified in stdoutLogFile. The default value is false. |
stdoutLogFile | Optional string attribute. Specifies the relative or absolute file path for which stdout and stderr from the process specified in processPath will be logged. Relative paths are relative to the root of the site. Any path starting with '.' will be relative to the site root and all other paths will be treated as absolute paths. A timestamp and the file extension will automatically be added to the filename provided. Any folders provided in the path must exist in order for the module to create the log file. The default value is |
forwardWindowsAuthToken | true or false. If true, the token will be forwarded to the child process listening on %ASPNETCORE_PORT% as a header 'MS-ASPNETCORE-WINAUTHTOKEN' per request. It is the responsibility of that process to call CloseHandle on this token per request. The default value is true. |
disableStartUpErrorPage | true or false. If true, the 502.5 - Process Failure page will be suppressed, and the 502 status code page configured in your web.config will take precedence. The default value is false. |
Setting environment variables
The ASP.NET Core Module allows you specify environment variables for the process specified in the processPath
attribute by specifying them in one or more environmentVariable
child elements of an environmentVariables
collection element under the aspNetCore
element. Environment variables set in this section take precedence over system environment variables for the process.
The example below sets two environment variables. ASPNETCORE_ENVIRONMENT
will configure the application's environment to Development
. A developer may temporarily set this value in the web.config file in order to force the developer exception page to load when debugging an app exception. CONFIG_DIR
is an example of a user-defined environment variable, where the developer has written code that will read the value on startup to form a path in order to load the app's configuration file.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile="\\?\%home%\LogFiles\stdout">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
<environmentVariable name="CONFIG_DIR" value="f:\application_config" />
</environmentVariables>
</aspNetCore>
app_offline.htm
If you place a file with the name app_offline.htm at the root of a web application directory, the ASP.NET Core Module will attempt to gracefully shutdown the app and stop processing incoming requests. If the app is still running after shutdownTimeLimit
number of seconds, the ASP.NET Core Module will kill the running process.
While the app_offline.htm file is present, the ASP.NET Core Module will respond to requests by sending back the contents of the app_offline.htm file. Once the app_offline.htm file is removed, the next request loads the application, which then responds to requests.
Start-up error page
If the ASP.NET Core Module fails to launch the backend process or the backend process starts but fails to listen on the configured port, you will see an HTTP 502.5 status code page. To suppress this page and revert to the default IIS 502 status code page, use the disableStartUpErrorPage
attribute. For more information on configuring custom error messages, see HTTP Errors <httpErrors>
.
Log creation and redirection
The ASP.NET Core Module redirects stdout
and stderr
logs to disk if you set the stdoutLogEnabled
and stdoutLogFile
attributes of the aspNetCore
element. Any folders in the stdoutLogFile
path must exist in order for the module to create the log file. A timestamp and file extension will be added automatically when the log file is created. Logs are not rotated, unless process recycling/restart occurs. It is the responsibility of the hoster to limit the disk space the logs consume. Using the stdout
log is only recommended for troubleshooting application startup issues and not for general application logging purposes.
Here's a sample aspNetCore
element that configures stdout
logging. The stdoutLogFile
path shown in the example is appropriate for the Azure App Service. A local path or network share path is acceptable for local logging. Confirm that the AppPool user identity has permission to write to the path provided.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="true"
stdoutLogFile="\\?\%home%\LogFiles\stdout">
</aspNetCore>
ASP.NET Core Module with an IIS Shared Configuration
The ASP.NET Core Module installer runs with the privileges of the SYSTEM account. Because the local system account does not have modify permission for the share path which is used by the IIS Shared Configuration, the installer will hit an access denied error when attempting to configure the module settings in applicationHost.config on the share.
The unsupported workaround is to disable the IIS Shared Configuration, run the installer, export the updated applicationHost.config file to the share, and re-enable the IIS Shared Configuration.
Module, schema, and configuration file locations
Module
IIS (x86/amd64):
%windir%\System32\inetsrv\aspnetcore.dll
%windir%\SysWOW64\inetsrv\aspnetcore.dll
IIS Express (x86/amd64):
%ProgramFiles%\IIS Express\aspnetcore.dll
%ProgramFiles(x86)%\IIS Express\aspnetcore.dll
Schema
IIS
- %windir%\System32\inetsrv\config\schema\aspnetcore_schema.xml
IIS Express
- %ProgramFiles%\IIS Express\config\schema\aspnetcore_schema.xml
Configuration
IIS
- %windir%\System32\inetsrv\config\applicationHost.config
IIS Express
- .vs\config\applicationHost.config
You can search for aspnetcore.dll in the applicationHost.config file. For IIS Express, the applicationHost.config file won't exist by default. The file is created at {application root}.vs\config when you start any web application project in the Visual Studio solution.