ASP.NET Core如何在Startup.cs中移除WebDAVModule解决IIS报错
IIS部署时移除WebDAVModule的免手动改配置方案
首先明确:*WebDAVModule是IIS层面运行在托管应用之前的原生模块,无法直接通过Startup.cs里的C#代码移除,以下是几个可落地的一劳永逸方案:
方案1:项目预置web.config配置(最推荐,零额外成本)
- 在你的Web项目根目录找到或新建
web.config文件 - 在
<system.webServer>节点下提前写入移除模块的配置:
<configuration> <system.webServer> <modules> <remove name="WebDAVModule" /> </modules> <!-- 保留你原有的其他配置,比如handlers、aspNetCore宿主配置等 --> </system.webServer> </configuration>
- 选中该文件,在属性面板设置:
- 生成操作:内容
- 复制到输出目录:如果较新则复制
后续执行发布时,这个配置会自动同步到发布包中,不需要每次发布后手动修改。
方案2:发布配置转换(适合多环境差异化部署)
如果你不想让本地开发环境的配置带IIS相关规则,可以用发布转换自动注入配置:
- 右键项目内的
web.config文件,选择「添加配置转换」,Visual Studio会自动根据你现有的发布Profile生成对应环境的转换文件(比如web.Production.config对应生产环境发布配置) - 在转换文件中写入如下规则,发布时会自动把移除模块的配置合并到最终输出的web.config里:
<?xml version="1.0" encoding="utf-8"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <system.webServer> <modules> <remove name="WebDAVModule" xdt:Transform="InsertIfMissing" /> </modules> </system.webServer> </configuration>
方案3:IIS服务器层面配置(有服务器权限时一劳永逸)
如果你能操作部署用的IIS服务器,可以直接在IIS侧配置,完全不用改项目代码:
- 全局生效:打开IIS管理器选中服务器根节点,找到「模块」功能,在列表中找到
WebDAVModule右键删除即可,服务器上所有站点都不会再被该模块拦截 - 单站点生效:选中你部署的目标站点,进入站点级别的「模块」列表,移除
WebDAVModule即可,后续发布项目只要不重置站点的模块配置就不会失效
注:你遇到的「Method Not Found」本质是WebDAVModule提前拦截了对应请求,甚至篡改了请求方法,导致应用根本没收到对应请求就返回了错误,移除该模块后问题就会彻底解决。
内容的提问来源于stack exchange,提问作者Prathamesh Pitale
相关产品推荐
相关产品推荐

