前言

有很长一段时间没有使用过IIS来托管应用了,今天用IIS来托管一个比较老的.NET Fx4.6的项目。发布到线上后居然一直调用不同本地却一直是正常的,关键是POST和GET请求都是正常的,只有PUT和DELETE请求是有问题的。经过一番思考忽然想起来了IIS默认情况下拒绝处理PUT和DELETE请求,要支持这两种请求的话需要做一些配置。

HTTP请求 405错误 方法不被允许 (Method Not Allowed)

为什么IIS拒绝处理PUT和Delete请求?

  1. IIS默认情况下拒绝处理PUT和DELETE请求的原因是出于安全考虑。PUT和DELETE方法被设计为具有写入和删除数据的能力,如果未正确配置和保护,可能会导致潜在的安全漏洞。
  2. 针对这些HTTP方法,微软开发了WebDAV(Web-based Distributed Authoring and Versioning)扩展,它允许用户在Web服务器上直接编辑和管理文件。IIS默认注册了一个名为"WebDAVModule"的自定义HttpModule,用于提供WebDAV支持。

为了防止未经授权的访问和潜在的攻击,IIS默认情况下仅允许GET和POST请求,并拒绝处理PUT和DELETE请求。这样可确保服务器上的文件只能通过受限的方法进行修改和删除。

直接到IIS模块中删除WebDAVModule[不起效果]

在应用程序的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请求的更多相关文章

  1. ASP.NET Web API是如何根据请求选择Action的?[下篇]

    ASP.NET Web API是如何根据请求选择Action的?[下篇] 再<上篇>中我们简单介绍了用于实现Action选择机制的HttpActionSelector,接下来我们来讨论本章 ...

  2. ASP.NET Web API是如何根据请求选择Action的?[上篇]

    ASP.NET Web API是如何根据请求选择Action的?[上篇] Web API的调用请求总是针对定义在某个HttpController中的某个Action方法,请求响应的内容来源于调用目标A ...

  3. ASP.NET Web API是如何根据请求选择Action的?[上篇] 【转】

    http://www.cnblogs.com/leo_wl/p/3316548.html ASP.NET Web API是如何根据请求选择Action的?[上篇] Web API的调用请求总是针对定义 ...

  4. ASP.NET Web API是如何根据请求选择Action的?[下篇] 【转】

    再<上篇>中我们简单介绍了用于实现Action选择机制的HttpActionSelector,接下来我们来讨论本章最为核心的内 容:ASP.NET Web API如何利用HttpActio ...

  5. Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?

    构成ASP.NET Web API核心框架的消息处理管道既不关心请求消息来源于何处,也不需要考虑响应消息归于何方.当我们采用Web Host模式将一个ASP.NET应用作为目标Web API的宿主时, ...

  6. Web Api如何传递POST请求

    这里记录一次Web Api传递post请求的例子,由于使用了默认工程的例子,方法名的参数值标记头为FromBody的形式,如下图所示的调用: 调用方式: 那么如果要两个以上的参数如何去实现,这种方式是 ...

  7. Dynamics 365 支持使用Web Api 通过名称来检索元数据

    关键检索元数据我在之前的一篇博文中稍有提及,当时是为了取实体的picklist字段的属性,但当时的版本只支持通过metadataid检索,而在365中又增加了名称的检索,方便了很多. 本篇依旧用之前博 ...

  8. Web API 实体对象Get请求参数为null

    实体对象前加上 [FromUri] 特性

  9. Web API 入门三(参数绑定)

    学到现在,感觉到微软的.NET各种框架和模型基础大致都差不多,所以,这部分内容大致和MVC部分差不多.在学习参事绑定之前,我们肯定要知道Controller(即控制器)是啥干啥的. 其实,Contro ...

  10. 通过扩展让ASP.NET Web API支持W3C的CORS规范

    让ASP.NET Web API支持JSONP和W3C的CORS规范是解决"跨域资源共享"的两种途径,在<通过扩展让ASP.NET Web API支持JSONP>中我们 ...

随机推荐

  1. [软件过程/软件生命周期模型]软件过程的工具链&技术链【待续】

    0 宣言:DevOps & RUP统一过程建模 1 项目管理 (需求管理 / 缺陷管理 / ...) 禅道(前身:bugfree) [在线协作] JIRA(项目与事务跟踪工具) 与禅道类同,但 ...

  2. 欢迎使用园子的 vscode 插件

    为了方便大家通过 vscode 编辑博文,我们做了一个小插件,插件名称是"博客园Cnblogs客户端",插件列表中搜索"博客园"或者 "cnblogs ...

  3. 四月六号java基础学习

    四月六号 1.今天学习了JAVA语言特点,有以下几个特点: 1)简单易学:相对于C/c++语言,java语言省去了指针(pointer).联合体(Unions)以及结构体(struct) 2)面向对象 ...

  4. CentOS 7 更改内网 IP

    打开网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-em2 修改配置文件如下 TYPE=Ethernet PROXY_METHOD=none BROWS ...

  5. 两种路由模式的区别(hash模式,history模式)

    1. hash 带#号的,history不带#号2.hash模式用的hashChange监听路径的变化3.history用的是HTML5相关的API语法 使用pushState => 添加一条历 ...

  6. Java学习笔记06

    1. 类和对象 1.1 类和对象 ​ 客观存在的事物皆为对象,所以我们也常常说万物皆对象. 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型,类是具有相同属性和行为 ...

  7. 深度学习--PyTorch定义Tensor以及索引和切片

    深度学习--PyTorch定义Tensor 一.创建Tensor 1.1未初始化的方法 ​ 这些方法只是开辟了空间,所附的初始值(非常大,非常小,0),后面还需要我们进行数据的存入. torch.em ...

  8. 五天学会Deep Learning

    五天学完deep learning......是时候来证明chatGPT和new bing的能力了...... DAY1 Sigmoid function Sigmoid 函数是一种常用的激活函数,它 ...

  9. javasec(二)class文件结构

    这篇文章介绍java的class文件结构. 深入理解Java虚拟机(类文件结构) 我们所编写的每一行代码,要在机器上运行最终都需要编译成二进制的机器码 CPU 才能识别.但是由于虚拟机的存在,屏蔽了操 ...

  10. Object-Advanced笔记

    JavaScript对象进阶 数据劫持 1. 概念 一旦访问或者修改对象的属性时 拦截这个行为(访问/修改) 并对其添加除这个行为外的操作 最后返回结果 2. 实现 2.1 getter和setter ...