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

ASP.NET Framework MVC中DELETE请求Postman可用但前端/浏览器报404求助

ASP.NET Framework MVC DELETE请求浏览器404、Postman正常的解决方法

核心原因

IIS默认启用的WebDAV模块会优先拦截DELETE、PUT这类HTTP方法,导致MVC控制器无法接收到浏览器发起的请求;Postman不受该模块和浏览器同源策略限制,因此可以正常执行请求。


解决方案1:禁用WebDAV模块(最有效)

在项目根目录的web.config中添加以下配置,移除WebDAV模块并更新请求处理器,确保DELETE请求能到达MVC控制器:

<system.webServer>
  <modules>
    <!-- 移除WebDAV模块,阻止它拦截DELETE请求 -->
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <!-- 移除WebDAV处理器 -->
    <remove name="WebDAV" />
    <!-- 更新无扩展名URL处理器,明确允许DELETE等HTTP方法 -->
    <add name="ExtensionlessUrlHandler-Integrated-4.0" 
         path="*." 
         verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" 
         type="System.Web.Handlers.TransferRequestHandler" 
         preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

解决方案2:优化控制器路由标记

给Delete方法添加明确的路由约束,确保路由系统能准确匹配请求:

// DELETE: Homes/Delete/5
[HttpDelete("{id}")]
public async Task<HomeEntity> Delete(int id) {
  return await homesManager.DeleteAsync(id);
}

或者直接指定完整路由路径:

[HttpDelete]
[Route("Homes/Delete/{id}")]
public async Task<HomeEntity> Delete(int id) {
  return await homesManager.DeleteAsync(id);
}

解决方案3:简化前端请求代码(可选)

去掉冗余的try-catch嵌套,确保请求逻辑简洁:

const handlePropertyDelete = () => {
  axios.delete(`https://localhost:44333/Homes/Delete/${property.id}`)
    .then((response) => {
      console.log("Property deleted:", response.data);
      onClose();
    })
    .catch((error) => {
      console.error("Error deleting property:", error);
    });
};

验证步骤

  1. 修改web.config后,重启ASP.NET应用和IIS Express
  2. 用浏览器重新发起DELETE请求测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:33:40