C# 如何在.NET 5.0中从IIS中删除WebDav?
我们有一个Web API Web服务站点,内置于.NET 4.5.2中,我们正在尝试将其迁移到.NET 5.0 我们遇到了一个常见的问题——当我们将站点部署到登台环境时,PUT和DELETE方法都不起作用。当我们使用生成的Swagger UI测试它们时,我们得到500个错误 注意-我们没有看到这些错误通过VS2019调试器在IIS Express中运行 当然,我们浏览网页,并找到答案: 因此,我们创建一个web.config:C# 如何在.NET 5.0中从IIS中删除WebDav?,c#,asp.net-core,iis,.net-5,C#,Asp.net Core,Iis,.net 5,我们有一个Web API Web服务站点,内置于.NET 4.5.2中,我们正在尝试将其迁移到.NET 5.0 我们遇到了一个常见的问题——当我们将站点部署到登台环境时,PUT和DELETE方法都不起作用。当我们使用生成的Swagger UI测试它们时,我们得到500个错误 注意-我们没有看到这些错误通过VS2019调试器在IIS Express中运行 当然,我们浏览网页,并找到答案: 因此,我们创建一个web.config: <?xml version="1.0"
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="WebDAV" />
</handlers>
<modules>
<remove name="WebDAVModule" />
</modules>
</system.webServer>
</configuration>
这导致了不同的问题
<?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添加到我们的版本控制中,但如果这样做,我们就不能在构建或运行期间更改其内容
我们如何处理调试运行期间修改的web.config?最好关闭WebDAV发布。 为此:
打开“打开或关闭Windows功能”。现在进入Internet信息服务\World Wide Web Services\Common HTTP Features\WebDAV Publishing。取消选中并单击“确定”。这些问题的出现似乎有很多原因,我不能假装已经找到了所有问题的答案 在这个特殊的例子中,问题是VS在web.config中插入了错误的元素 添加和元素以删除WebDAV导致VS插入元素:
并且插入的元素缺少必需的processPath=属性
<aspNetCore processPath="dotnet" stdoutLogEnabled="false" hostingModel="InProcess" />
您是否尝试过获取生成的web.config并覆盖随附的web.config?您说在IIS Express中运行时会遇到500个错误-您遇到的潜在错误是什么?500只是一个错误代码,但是日志应该包含更详细的信息。IIS Express日志文件夹是空的。这些不是唯一的日志,是吗?你检查过Windows事件日志了吗?是否将日志添加到应用程序?检查调试控制台?上面说什么?在哪里?在我们的开发机器上?我们已经在我们的开发机器上禁用了WebDAV。在暂存和生产环境中?我们的暂存环境托管在Azure中。我们如何在那里关闭WebDAV?如果这些服务器上还有其他站点需要启用WebDAV呢?请将此添加到。。。。
<aspNetCore processPath="dotnet" stdoutLogEnabled="false" hostingModel="InProcess" />