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

问题描述 投票:0回答:3

我正在开发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 进行配置。

所以我这里有三个问题。

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

更新:

正如@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

c# asp.net-core iis asp.net-core-webapi web-deployment
3个回答
1
投票

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

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

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

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

  • 在配置编辑器的“部分”部分,选择左侧下拉列表中的

    system.webServer/aspNetCore
    ,选择
    ApplicationHost.config

  • 单击

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

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

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

尝试以上方法。 快乐编码!!


0
投票

%Launcher_PATH%
%LAUNCHER_ARGS%
在发布过程中必须更换。

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">

请查看这个答案以了解更多详情


0
投票

您可以修改项目文件,以便该设置自动包含在发布的 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>
© www.soinside.com 2019 - 2024. All rights reserved.