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); }); };
验证步骤
- 修改
web.config后,重启ASP.NET应用和IIS Express - 用浏览器重新发起DELETE请求测试
内容的提问来源于stack exchange,提问作者Beatrice
相关产品推荐
相关产品推荐

