I am developing Asp.Net Core 3.1 API. Its running fine and I am deploying it on IIS and It's giving me the below error.
HTTP Error 403.14 - Forbidden
I have found out the root cause of the issue, I am putting my observation below.
This is my original web.config
<?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=".\EngageAPI.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
So when I run the project locally using the visual studio 2019, it is changing the content of web.config to the below mentioned.
<?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="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
<environmentVariables>
<environmentVariable name="COMPLUS_ForceENC" value="1" />
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
So when I Publish the application in Release solution configuration, it generates the web.config with the latest changes. and when I deploy the API using this publish folder in IIS and run the application, it gives the 403.14
error.
To fix this I have manually copied the old web.config content to the IIS virtual directory web.config. and I am able to run the application successfully.
So learning from this is that We need to handle it differently if we are making any changes on the web.config, But I would suggest not making any changes in the web.config, instead use the appsettings.json for configuration.
So I have three questions here.
Update:
As suggested by @ScareCrow in his answer I have made the required changes and I have started getting the below error.
HTTP Error 500.0 - ANCM In-Process Handler Load Failure
Event Viewer logs:
Log Name: Application Source: IIS AspNetCore Module V2 Date: 7/15/2020 3:29:03 AM Event ID: 1031 Task Category: None Level: Error Keywords: Classic User: N/A Computer: SUSIAALGCBWSXT1.FCStone.com Description: Application 'D:\Octopus\Applications\Beta\ISOXMLValidationApi\1.0.0.9' failed to start. Exception message: Executable was not found at 'D:\Octopus\Applications\Beta\ISOXMLValidationApi\1.0.0.9%LAUNCHER_PATH%.exe' Event Xml:
1031 2 0 0x80000000000000 1090650 Application SUSIAALGCBWSXT1.FCStone.com Application 'D:\Octopus\Applications\Beta\ISOXMLValidationApi\1.0.0.9' failed to start. Exception message: Executable was not found at 'D:\Octopus\Applications\Beta\ISOXMLValidationApi\1.0.0.9%LAUNCHER_PATH%.exe' Process Id: 19916. File Version: 13.1.20142.5. Description: IIS ASP.NET Core Module V2. Commit: 844a82e37cae48af2ab2ee4f39b41283e6bb4f0e
Maybe the issue is related to the "ASPNETCORE_ENVIRONMENT" variable setup. We have to provide this information in IIS.
You can actually set it on the website in IIS.
Open the "Internet Information Services (IIS) Manager.
Go to the Website where you want to set the environment variable. Find the "Configuration Editor".
In the "Section" part of Configuration Editor, select system.webServer/aspNetCore
in the left dropdown select ApplicationHost.config
.
Click on environmentVariables
then you will get the Current env variable. Add a new env variable.
name
will be ASPNETCORE_ENVIRONMENT
and value
will be Development
[staging/Prod].
Close the window and restart the website.
Give a try with the above. Happy Coding!!