C# 如何在.NET 5.0中从IIS中删除WebDav?

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"

我们有一个Web API Web服务站点,内置于.NET 4.5.2中,我们正在尝试将其迁移到.NET 5.0

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

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

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

因此,我们创建一个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信息服务\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" />