如何解决 Asp.Net Core API 中的 HTTP 错误 403.14 - 禁止?

viv*_*una 6 c# iis web-deployment asp.net-core asp.net-core-webapi

我正在开发 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>
Run Code Online (Sandbox Code Playgroud)

因此,当我使用 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>
Run Code Online (Sandbox Code Playgroud)

因此,当我在发布解决方案配置中发布应用程序时,它会生成包含最新更改的 web.config。当我在 IIS 中使用此发布文件夹部署 API 并运行应用程序时,出现错误403.14

为了解决这个问题,我手动将旧的 web.config 内容复制到 IIS 虚拟目录 web.config。我能够成功运行该应用程序。

因此,从中学到的是,如果我们对 web.config 进行任何更改,我们需要以不同的方式处理它,但我建议不要在 web.config 中进行任何更改,而是使用 appsettings.json 进行配置。

所以我在这里有三个问题。

  1. 问题的根本原因是什么,我已经提到了这个问题,但不知道为什么会出现此错误?
  2. 我们怎样才能以更干净、更简单的方式解决这个问题?
  3. 如果确实需要修改web.config,我们怎样才能干净利落地修改呢?

更新:

正如 @ScareCrow 在他的回答中所建议的,我已经进行了所需的更改,并且开始出现以下错误。

HTTP 错误 500.0 - ANCM 进程内处理程序加载失败

事件查看器日志:

日志名称:应用程序源:IIS AspNetCore 模块 V2 日期:7/15/2020 3:29:03 AM 事件 ID:1031 任务类别:无级别:错误关键字:经典用户:N/A 计算机:SUSIAALGCBWSXT1.FCStone.com 说明: 应用程序“D:\Octopus\Applications\Beta\ISOXMLValidationApi\1.0.0.9”无法启动。异常消息:在 'D:\Octopus\Applications\Beta\ISOXMLValidationApi\1.0.0.9%LAUNCHER_PATH%.exe' 处找不到可执行文件 事件 Xml:
1031 2 0 0x80000000000000 1090650 应用程序 SUSIAALGCBWSXT1.FCStone.com 应用程序 'D:\Octopus\ Applications\Beta\ISOXMLValidationApi\1.0.0.9' 无法启动。异常消息:在“D:\Octopus\Applications\Beta\ISOXMLValidationApi\1.0.0.9%LAUNCHER_PATH%.exe”处找不到可执行文件,进程 ID:19916。文件版本:13.1.20142.5。描述:IIS ASP.NET Core 模块 V2。提交:844a82e37cae48af2ab2ee4f39b41283e6bb4f0e

小智 1

也许问题与“ASPNETCORE_ENVIRONMENT”变量设置有关。我们必须在 IIS 中提供此信息。

其实你可以在IIS的网站上设置。

  • 打开“Internet 信息服务 (IIS) 管理器。

  • 转到您要设置环境变量的网站。找到“配置编辑器”。

  • 在配置编辑器的“部分”部分中,system.webServer/aspNetCore在左侧下拉列表中选择ApplicationHost.config

  • 单击environmentVariables然后您将获得当前环境变量。添加一个新的环境变量。

  • name将会是ASPNETCORE_ENVIRONMENT并且value将会是Development[登台/产品]。

  • 关闭窗口并重新启动网站。

尝试一下上面的方法。快乐编码!