我正在开发Asp.Net Core 3.1 API。它运行良好,我正在 IIS 上部署它,但它给了我以下错误。
HTTP 错误 403.14 - 禁止
我已经找到了问题的根本原因,我将我的观察结果写在下面。
这是我原来的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>
因此,当我使用 Visual Studio 2019 在本地运行该项目时,它将 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="%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>
因此,当我在发布解决方案配置中发布应用程序时,它会生成包含最新更改的 web.config。当我在 IIS 中使用此发布文件夹部署 API 并运行应用程序时,它会出现
403.14
错误。
为了解决这个问题,我手动将旧的 web.config 内容复制到 IIS 虚拟目录 web.config。我能够成功运行该应用程序。
所以从中学到的是,如果我们对 web.config 进行任何更改,我们需要以不同的方式处理它,但我建议不要在 web.config 中进行任何更改,而是使用 appsettings.json 进行配置。
所以我这里有三个问题。
更新:
正如@ScareCrow 在他的回答中所建议的,我已经进行了所需的更改,并且我已经开始收到以下错误。
HTTP 错误 500.0 - ANCM 进程内处理程序加载失败
事件查看器日志:
日志名称:应用程序来源:IIS AspNetCore Module V2 日期:2020 年 7 月 15 日凌晨 3:29:03 事件 ID:1031 任务类别: 无 级别:错误 关键字:经典 用户:N/A 计算机:SUSIAALGCBWSXT1.FCStone.com 说明:应用程序 “D:\Octopus\Applications\Beta\ISOXMLValidationApi .0.0.9”失败 开始。异常消息:找不到可执行文件 'D:\Octopus\Applications\Beta\ISOXMLValidationApi .0.0.9%LAUNCHER_PATH%.exe' 事件 XML:
1031 2 0 0x80000000000000 1090650 应用 SUSIAALGCBWSXT1.FCStone.com 应用程序“D:\Octopus\Applications\Beta\ISOXMLValidationApi .0.0.9”失败 开始。异常消息:找不到可执行文件 'D:\Octopus\Applications\Beta\ISOXMLValidationApi .0.0.9%LAUNCHER_PATH%.exe' 进程 ID:19916。 文件版本:13.1.20142.5。描述:IIS ASP.NET Core 模块 V2。提交:844a82e37cae48af2ab2ee4f39b41283e6bb4f0e
也许问题与“ASPNETCORE_ENVIRONMENT”变量设置有关。我们必须在 IIS 中提供此信息。
其实你可以在IIS中的网站上设置。
打开“Internet 信息服务 (IIS) 管理器。
转到您要设置环境变量的网站。找出 “配置编辑器”。
在配置编辑器的“部分”部分,选择左侧下拉列表中的
system.webServer/aspNetCore
,选择ApplicationHost.config
。
单击
environmentVariables
然后您将获得当前环境变量。添加一个新的环境变量。
name
将是 ASPNETCORE_ENVIRONMENT
并且 value
将是 Development
[登台/产品]。
关闭窗口并重新启动网站。
尝试以上方法。 快乐编码!!
%Launcher_PATH%
和 %LAUNCHER_ARGS%
在发布过程中必须更换。
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
请查看这个答案以了解更多详情
您可以修改项目文件,以便该设置自动包含在发布的 web.config 中,而不是在 IIS 设置中设置环境变量:
<!-- Custom property group added to add the environment name during publish -->
<!-- The EnvironmentName property is used during the publish for the environment variable in web.config -->
<PropertyGroup Condition="'$(Configuration)' == '' Or '$(Configuration)' == 'Debug'">
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' != '' AND '$(Configuration)' != 'Debug'">
<EnvironmentName>Production</EnvironmentName>
</PropertyGroup>