如何在 .NET 5.0 中从 IIS 中删除 WebDav?
How to remove WebDav from IIS, in .NET 5.0?
我们有一个在 .NET 4.5.2 中构建的 Web API 网络服务站点,我们正在尝试将其迁移到 .NET 5.0。
我们 运行 遇到了一个似乎很常见的问题 - 当我们将站点部署到暂存环境时,none PUT 和 DELETE 方法起作用。当我们使用生成的 Swagger UI 测试它们时,我们得到 500 个错误。
注意 - 我们没有在 IIS Express 中通过 VS2019 调试器看到这些错误 运行ning。
我们浏览网页,当然,找到答案:
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>
这会导致不同的问题。
- 当我们尝试通过 VS2019 调试器 运行 IIS Express 中的站点时,出现 HTTP 500 错误,并且
- 运行站点修改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 在调试期间被修改 运行?
最好关闭 WebDAV 发布。
要做到这一点 :
打开“打开或关闭 Windows 功能”。现在在 Internet Information Services\World Wide Web Services\Common HTTP Features\WebDAV Publishing 里面。取消选中它并单击确定。
出现这些问题的原因似乎有很多,我不能假装找到了所有问题的答案。
在这种特殊情况下,问题是 VS 将错误元素插入 web.config。
添加 和 元素以删除 WebDAV 导致 VS 插入 元素:
<aspNetCore stdoutLogEnabled="false" hostingModel="InProcess" />
并且插入的元素缺少所需的 processPath= 属性。
<aspNetCore processPath="dotnet" stdoutLogEnabled="false" hostingModel="InProcess" />
我们有一个在 .NET 4.5.2 中构建的 Web API 网络服务站点,我们正在尝试将其迁移到 .NET 5.0。
我们 运行 遇到了一个似乎很常见的问题 - 当我们将站点部署到暂存环境时,none PUT 和 DELETE 方法起作用。当我们使用生成的 Swagger UI 测试它们时,我们得到 500 个错误。
注意 - 我们没有在 IIS Express 中通过 VS2019 调试器看到这些错误 运行ning。
我们浏览网页,当然,找到答案:
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>
这会导致不同的问题。
- 当我们尝试通过 VS2019 调试器 运行 IIS Express 中的站点时,出现 HTTP 500 错误,并且
- 运行站点修改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 在调试期间被修改 运行?
最好关闭 WebDAV 发布。 要做到这一点 : 打开“打开或关闭 Windows 功能”。现在在 Internet Information Services\World Wide Web Services\Common HTTP Features\WebDAV Publishing 里面。取消选中它并单击确定。
出现这些问题的原因似乎有很多,我不能假装找到了所有问题的答案。
在这种特殊情况下,问题是 VS 将错误元素插入 web.config。
添加
<aspNetCore stdoutLogEnabled="false" hostingModel="InProcess" />
并且插入的元素缺少所需的 processPath= 属性。
<aspNetCore processPath="dotnet" stdoutLogEnabled="false" hostingModel="InProcess" />