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

ASP.NET WebApi中带HttpPost特性的Delete接口返回405问题求助

解决ASP.NET WebApi中Post请求Delete Action返回405的问题

我来帮你搞定这个405错误的问题!你遇到的情况其实是ASP.NET WebApi里很常见的几个小坑导致的,咱们一步步解决:

1. 检查HttpPost特性的命名空间(最可能的根源)

你的代码里引用了System.Web.Mvc的HttpPost特性,但你的控制器继承的是System.Web.Http.ApiController(WebApi专属控制器),这俩完全不是一个体系的!WebApi必须使用System.Web.Http命名空间下的HttpPost特性才能生效。

修正代码的步骤:

  • 替换引用:把using System.Web.Mvc;换成using System.Web.Http;
  • 确保[HttpPost]特性来自正确的命名空间

修正后的代码示例:

using System.Web.Http;

namespace ECIS.Mobile.OpenApi.WebApi.Controllers.Manager
{
    public class AdController : ApiController
    {
        [HttpPost]
        public int Delete(int id)
        {
            return 1;
        }
    }
}

2. 调整WebApi路由配置,确保请求能匹配到Action

如果上面的修改还没解决问题,大概率是路由规则没正确匹配你的Post请求。这里有两种解决方案:

方法A:使用特性路由(推荐)

直接给Delete Action加上路由特性,明确指定请求路径和允许的Http方法,避免路由歧义:

[HttpPost]
[Route("api/Ad/Delete")] // 路径可根据你的实际路由前缀调整
public int Delete(int id)
{
    return 1;
}

记得要在WebApiConfig.cs里先启用特性路由:

public static void Register(HttpConfiguration config)
{
    // 启用特性路由
    config.MapHttpAttributeRoutes();

    // 其他默认路由配置...
}

方法B:修改默认路由规则

如果习惯用传统的路由配置,把WebApi的默认路由模板改成包含action参数,这样就能通过Action名称匹配请求:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

之后你就可以通过POST /api/Ad/Delete?id=1这样的请求访问到目标Action了。

3. 禁用WebDAV模块(解决潜在的请求拦截问题)

有时候IIS自带的WebDAV模块会拦截Delete相关的请求,导致莫名其妙的405错误。可以在web.config里直接禁用它:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>

按照这个顺序排查,基本就能解决你的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:03:35