Asp.Net Core 2发布时web.config被覆盖,如何解决WebDav拦截PUT请求?
解决Asp.Net Core 2中IIS 7 WebDav阻止PUT请求且web.config被覆盖的问题
我完全懂你这份困扰——每次发布后服务器自动生成的web.config都会把你手动添加的WebDav移除配置给覆盖掉,反复手动修改实在太折腾人了。其实Asp.Net Core 2已经提供了更省心的解决方案,不用再每次发布后去服务器上重复操作:
- 利用项目根目录的web.config模板:这个模板文件是发布时生成服务器端web.config的基础,只要你在这里配置好移除WebDav的规则,发布后服务器上的web.config就会自动继承这些设置,再也不会被覆盖。
具体操作步骤:
- 打开你的Asp.Net Core 2项目根目录,找到
web.config文件(如果没有的话直接新建一个即可); - 在文件的
<system.webServer>节点中,添加移除WebDav模块和处理程序的配置,完整示例如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <modules runAllManagedModulesForAllRequests="false"> <!-- 移除WebDav模块 --> <remove name="WebDAVModule" /> </modules> <handlers> <!-- 移除WebDav处理程序 --> <remove name="WebDAV" /> <!-- 确保AspNetCore核心处理程序正常配置 --> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\YourProject.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" /> </system.webServer> </configuration>
- 保存这个文件后,下次发布项目时,服务器上生成的web.config就会自动包含这些移除WebDav的配置,你再也不用手动去修改服务器上的文件了。
另外要注意,如果你用Visual Studio发布,确保发布配置里没有勾选“强制覆盖现有文件”这类会直接替换web.config的选项(默认情况下,发布工具会基于项目里的web.config模板生成目标文件,不会强制覆盖)。
这样就能一劳永逸解决WebDav阻止PUT请求,同时避免每次发布后重复配置的问题了。
内容的提问来源于stack exchange,提问作者Matthew Flynn
相关产品推荐
相关产品推荐

