前言
有很长一段时间没有使用过iis来托管应用了,今天用iis来托管一个比较老的.net fx4.6的项目。发布到线上后居然一直调用不同本地却一直是正常的,关键是post和get请求都是正常的,只有put和delete请求是有问题的。经过一番思考忽然想起来了iis默认情况下拒绝处理put和delete请求,要支持这两种请求的话需要做一些配置。
http请求 405错误 方法不被允许 (method not allowed)
为什么iis拒绝处理put和delete请求?
iis默认情况下拒绝处理put和delete请求的原因是出于安全考虑。put和delete方法被设计为具有写入和删除数据的能力,如果未正确配置和保护,可能会导致潜在的安全漏洞。
针对这些http方法,微软开发了webdav(web-based distributed authoring and versioning)扩展,它允许用户在web服务器上直接编辑和管理文件。iis默认注册了一个名为"webdavmodule"的自定义httpmodule,用于提供webdav支持。
为了防止未经授权的访问和潜在的攻击,iis默认情况下仅允许get和post请求,并拒绝处理put和delete请求。这样可确保服务器上的文件只能通过受限的方法进行修改和删除。
直接到iis模块中删除webdavmodule[不起效果]
进入iis,选中出问题的站点或应用,可以看到其主页上有个模块功能,如下图所示:
双击模块功能,进入其详细页面,可以看到webdavmodule项,如下图所示:
右击webdavmodule,在右击菜单里点击删除,或者在右侧的操作里点击删除,如下图所示:
重启站点或应用,搞定!!!dos或运行下(iisreset /restart)
在应用程序的web.config配置如下代码[有用]
作用是移除 iis 中的 "webdavmodule" 模块,并允许所有请求运行托管模块。这个配置适用于需要使用 put 和 delete 请求的应用程序或需要托管模块对所有请求进行处理的情况。在实际应用中,请根据需要和安全性考虑进行评估和使用。
<configuration> <system.webserver> <modules runallmanagedmodulesforallrequests="true"> <remove name="webdavmodule"/> </modules> <system.webserver> </configuration>
到此这篇关于让iis支持.net web api put和delete请求(返回405的问题)的文章就介绍到这了,更多相关iis支持delete/put请求内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论