You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IIS经典模式下PUT/DELETE方法失效的兼容解决方案咨询

解决IIS经典模式下.NET Web API PUT/DELETE方法失效问题

针对你在IIS 10经典模式下Web API PUT/DELETE方法失效的问题,以下是可行的解决办法:

1. 替换Web.config中的Handler配置

你的当前配置里使用的是集成模式专属的ExtensionlessUrlHandler-Integrated-4.0,经典模式下该处理器不会生效。需要替换为经典模式适用的处理器:

修改<system.webServer>下的<handlers>节点:

<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <remove name="WebDAV" /> <!-- 额外移除WebDAV处理器 -->
  <!-- 添加经典模式的无扩展名URL处理器 -->
  <add name="ExtensionlessUrlHandler-Classic-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="classicMode,runtimeVersionv4.0" />
</handlers>

2. 完全禁用WebDAV模块

仅禁用模块可能不够,需要在<system.webServer>里同时移除WebDAV模块和处理器:

<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule" />
</modules>

runAllManagedModulesForAllRequests="true"确保所有托管模块(包括Web API的路由模块)能处理所有请求,这在经典模式下尤为重要。

3. 检查IIS请求筛选设置

确认IIS未拒绝PUT/DELETE动词:

  • 打开IIS管理器,找到你的站点
  • 进入请求筛选功能,切换到HTTP动词标签
  • 确保PUT和DELETE不在“拒绝的动词”列表中,若存在则删除;若默认规则拒绝,可添加允许规则

4. 验证应用程序池配置

  • 确认应用程序池的**.NET CLR版本**设置为v4.0.x(与你的Web API框架版本匹配)
  • 托管管道模式保持经典不变

修改后的完整Web.config示例

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="DBConnection" connectionString="*****" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <remove name="WebDAV" />
      <add name="ExtensionlessUrlHandler-Classic-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="classicMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
</configuration>

原理说明

集成模式下IIS与ASP.NET共享统一请求管道,Web API的路由模块能直接处理PUT/DELETE请求;而经典模式采用传统ISAPI映射,必须通过正确的处理器映射,让无扩展名的请求传递到ASP.NET运行时,同时确保WebDAV不会拦截PUT/DELETE动词。

内容的提问来源于stack exchange,提问作者gandhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:53:12