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

部署到IIS后AngularJS $http.put请求返回405错误

问题:ASP.NET + AngularJS项目部署IIS后PUT请求返回405错误

本地用Visual Studio测试时,$http.put请求可正常更新数据库,但部署到IIS服务器后始终返回405状态码。

相关代码

前端请求代码

$http.put(req, oB).then(function(r) {  
    DoSomething(oB.Id); 
})

(对象oB在调用该请求的函数中定义)

后端ASP.NET控制器代码

[HttpPut("{id}")]
public async Task<ActionResult> PutOb(int id, Object ob)
{
    if (id != ob.Id)
    {
        return BadRequest();
    }
    var oldOb= _context.Object.Where(x => x.Id == ob.Id).FirstOrDefault();
    oldOb.Name = ob.Name;
    _context.Entry(oldOb).State = EntityState.Modified;

    try
    {
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!obExisit(id))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    return NoContent();
}

已尝试去掉.then直接调用put,错误未解决。

失败请求跟踪日志信息

启用IIS失败请求跟踪后,日志显示:

  • 模块:WebDAV Module
  • 通知:MAP_REQUEST_HANDLER
  • 处理程序:ExtensionlessUrlHandler-Integrated-4.0
  • 错误代码:0x00000000
  • 核心原因:WebDAV模块拦截了PUT请求,导致方法被禁止

解决方案

1. 禁用WebDAV模块

在项目的web.config中添加以下配置,阻止WebDAV拦截PUT/DELETE等HTTP动词:

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

2. 确认IIS允许PUT动词

  • 打开IIS管理器,定位到目标站点
  • 进入「请求筛选」功能,切换到「HTTP动词」标签
  • 检查列表中是否包含PUT,若没有则手动添加并允许

3. 验证路由匹配

确认前端req变量对应的URL格式与后端路由一致,例如后端路由为[HttpPut("{id}")],则请求URL应为/api/控制器名/目标ID(如/api/Objects/123),确保id参数正确传递。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:17:16