【问题标题】:How to solve the HTTP Error 403.14 - Forbidden in Asp.Net Core API?如何解决 HTTP 错误 403.14 - Asp.Net Core API 中的禁止?
【发布时间】:2020-07-10 15:49:28
【问题描述】:

我正在开发 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. 问题的根本原因是什么,我已经提到了这个question,但不知道为什么会出现这个错误?
  2. 我们如何才能以更简洁的方式解决问题?
  3. 如果真的需要修改web.config,我们如何才能干净利落地呢?

更新:

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

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

事件查看器日志:

日志名称:应用程序源:IIS AspNetCore Module V2 日期:2020 年 7 月 15 日凌晨 3:29:03 事件 ID:1031 任务类别: 无级别:错误关键字:经典用户:不适用 计算机: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

【问题讨论】:

  • 我不知道它是否仍然适用于 net core,但在 .net 框架内,此错误过去是由于 IIS 用户缺乏权限
  • @Krusty 谢谢,但它与原始 web.config 内容一起使用,所以我认为它与权限无关
  • 什么请求给了你 403.14?在编写 Web API 时,您应该知道它可以处理哪些 URL(显然并非所有 URL 都可以产生 200)。
  • @LexLi 是的,它给出了 403.14
  • @viveknuna 您启用了哪个 iis 功能?确保您有足够的权限分配给发布文件夹。您如何在 iis 中发布网站?确保您的 iis 网站指向正确的已发布文件夹。

标签: c# asp.net-core iis asp.net-core-webapi web-deployment


【解决方案1】:

可能问题与“ASPNETCORE_ENVIRONMENT”变量设置有关。我们必须在 IIS 中提供这些信息。

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

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

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

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

  • 点击environmentVariables 然后你会得到当前环境变量。添加一个新的环境变量。

  • name 将是 ASPNETCORE_ENVIRONMENTvalue 将是 Development[staging/Prod]。

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

试试上面的。 快乐编码!

【讨论】:

【解决方案2】:

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

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

更多详情请查看this答案

【讨论】:

  • 我不是在找这个
  • 您的错误消息显示 -> 异常消息:在 'D:\Octopus\Applications\Beta\ISOXMLValidationApi\1.0.0.9%LAUNCHER_PATH%.exe' 找不到可执行文件
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多