【问题标题】:How to remove WebDav from IIS, in .NET 5.0?如何在 .NET 5.0 中从 IIS 中删除 WebDav?
【发布时间】:2021-07-03 12:40:55
【问题描述】:

我们有一个内置于 .NET 4.5.2 的 Web API 网络服务站点,我们正在尝试迁移到 .NET 5.0。

我们遇到了一个似乎很常见的问题 - 当我们将站点部署到我们的临时环境时,PUT 和 DELETE 方法都不起作用。当我们使用生成的 Swagger UI 测试它们时,我们得到 500 个错误。

注意 - 我们没有通过 VS2019 调试器在 IIS Express 中看到这些错误。

当然,我们浏览网页并找到答案:

How do you fix a 500 Server Error while running REST PUT or DELETE requests?

所以我们创建了一个 web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="WebDAV" />
    </handlers>
    <modules>
      <remove name="WebDAVModule" />
    </modules>
  </system.webServer>
</configuration>

这会导致不同的问题。

  1. 当我们尝试通过 VS2019 调试器在 IIS Express 中运行该站点时,出现 HTTP 500 错误,并且
  2. 运行站点会修改 web.config。

web.config 现在看起来像:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="WebDAV" />
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <modules>
      <remove name="WebDAVModule" />
    </modules>
    <aspNetCore stdoutLogEnabled="false" hostingModel="InProcess" />
  </system.webServer>
</configuration>

注意添加了 aspNetCore。

所以,事情就是这样。

  • 我们需要它在部署到 IIS 时工作,在本地运行时,以及
  • 在构建过程中,我们不能有部分生成的源文件。我们的整个构建和版本控制系统是建立在这样的想法之上的:有些文件包含开发人员编写的代码,有些文件是在构建过程中生成的。前者我们保存版本控制,后者我们不保存。我们可以将 web.config 添加到我们的版本控制中,但如果这样做,我们不能在构建或运行期间更改其内容。

那么,我们该怎么办?

当部署在 IIS 中以及在调试时在 IIS Express 中运行时,我们如何让它工作?

我们如何处理在调试运行期间修改的 web.config?

【问题讨论】:

  • 您是否尝试过获取生成的 web.config,并覆盖您提供的那个?您说在 IIS Express 中运行时遇到 500 个错误 - 您遇到的潜在错误是什么? 500 只是一个错误代码,但日志应该包含更详细的信息。
  • IIS Express 日志文件夹为空。
  • 嗯,这些不是唯一的日志,是吗?您检查过 Windows 事件日志吗?将日志记录添加到您的应用程序?检查调试控制台?那些说什么?

标签: c# asp.net-core iis .net-5


【解决方案1】:

这类问题的出现似乎有很多原因,我不能假装找到了所有问题的答案。

在这种特殊情况下,问题在于 VS 在 web.config 中插入了错误的元素。

添加 元素以移除 WebDAV 导致 VS 插入 元素:

<aspNetCore stdoutLogEnabled="false" hostingModel="InProcess" />

并且插入的元素缺少必需的 processPath= 属性。

<aspNetCore processPath="dotnet" stdoutLogEnabled="false" hostingModel="InProcess" />

【讨论】:

    【解决方案2】:

    最好关闭 WebDAV Publishing。 要做到这一点 : 打开“打开或关闭 Windows 功能”。现在在 Internet Information Services\World Wide Web Services\Common HTTP Features\WebDAV Publishing 中。取消选中它并单击“确定”。

    【讨论】:

    • 在哪里?在我们的开发机器上?我们已经在开发机器上禁用了 WebDAV。在登台和生产环境中?我们的暂存环境托管在 Azure 中。我们如何在那里关闭 WebDAV?如果这些服务器上还有其他站点需要启用 WebDAV,该怎么办?
    • 中添加这个......
    猜你喜欢
    • 2015-08-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2021-03-29
    • 2021-03-16
    • 2012-08-20
    相关资源
    最近更新 更多