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

.NET 8下ASP.NET Core Web API移除WebDAV无效的解决办法

解决ASP.NET Core 8 DELETE接口返回MethodNotAllowed的问题

一、完善web.config配置(IIS部署场景)

仅移除WebDAV模块不足以解决问题,需补充禁用WebDAV处理程序,并明确允许DELETE请求:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <modules>
      <remove name="WebDAVModule" />
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <security>
      <requestFiltering>
        <verbs allowUnlisted="false">
          <add verb="DELETE" allowed="true" />
          <add verb="GET" allowed="true" />
          <add verb="POST" allowed="true" />
          <add verb="PUT" allowed="true" />
        </verbs>
      </requestFiltering>
    </security>
    <aspNetCore processPath="dotnet" arguments=".\YourApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
  </system.webServer>
</configuration>

注意将YourApi.dll替换为实际的项目程序集名称。

二、核对API路由配置

确保DELETE接口的路由定义无冲突:

  • 验证控制器与方法的路由属性匹配,示例:
[ApiController]
[Route("api/[controller]")]
public class ItemsController : ControllerBase
{
    [HttpDelete("{id}")]
    public async Task<IActionResult> DeleteItem(int id)
    {
        // 业务逻辑实现
        return NoContent();
    }
}
  • 检查是否存在同路径的其他路由(如GET/POST)覆盖DELETE的匹配规则。

三、验证请求合法性

  • 确认调用方发送的是标准DELETE请求,部分客户端可能因限制发送POST请求并携带X-HTTP-Method-Override头,此时需在API中启用方法覆盖:
    在Program.cs中添加中间件:
app.UseRouting();
app.UseHttpMethodOverride(); // 启用方法覆盖
app.UseAuthorization();

同时要求客户端请求头包含X-HTTP-Method-Override: DELETE,且实际请求方法为POST。

  • 核对请求URL与Swagger测试的地址完全一致,避免路径参数、查询参数不匹配导致路由未命中。

四、检查跨域(CORS)配置

若调用方为跨域应用,确保CORS策略允许DELETE方法:
在Program.cs中配置:

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowCrossDomain", policy =>
    {
        policy.AllowAnyOrigin()
              .AllowAnyHeader()
              .WithMethods("GET", "POST", "PUT", "DELETE"); // 明确允许DELETE方法
    });
});

// 放置在UseRouting之后、UseAuthorization之前
app.UseCors("AllowCrossDomain");

五、排查IIS全局WebDAV配置

若服务器IIS全局启用了WebDAV,可能覆盖站点级配置:

  1. 打开IIS管理器,定位目标站点
  2. 进入“WebDAV创作规则”,确认已禁用该功能
  3. 在站点“模块”列表中,确认WebDAVModule已被移除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:37:30