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

IIS 10部署WebAPI后PUT请求报405(Method Not Allowed)求助

问题描述

我编写了如下WebAPI方法:

[HttpPut]
[Route("upload/ChunkedUpload")]
[ImpersonationFilterWebApi("ProjectFiles")]
public async Task<HttpResponseMessage> CommitChunks([FromUri] string dzIdentifier, [FromUri] string fileName, [FromUri] long expectedBytes, [FromUri] uint totalChunks, [FromUri] uint itemId) {

该方法在本地Visual Studio运行时正常,但部署到生产环境IIS 10服务器后,发起PUT请求出现405错误:

javascript1?v=9zU3C3vkUYnLf2paLT6JsPUTvHXvlBbfxht3jJFWSEw1:9  PUT http://tms/api/files/upload/ChunkedUpload?dzIdentifier=85322f6a-7278-47af-8d31-adabb7ec3e48&fileName=9ea0d769&expectedBytes=9&totalChunks=1&itemId=1922539 405 (Method Not Allowed)
layout-global?v=7dFKsLh-DLUDvhoJPr74SU8y-KMSjoYyG3k5-fHCfkE1:1 AjaxUnAuthorized 405

本地正常仅生产环境报错,怀疑IIS阻止了PUT请求,但检查IIS管理器设置未发现异常,请求协助排查原因。

排查方案
  • 检查IIS请求筛选规则:
    打开IIS管理器,找到对应站点,进入「请求筛选」→「HTTP谓词」,确认PUT方法未被拒绝。如果被拒绝,添加允许PUT的规则。

  • 禁用WebDAV模块:
    IIS默认启用的WebDAV模块会拦截PUT/DELETE请求,可在站点的web.config中添加以下配置禁用:

    <system.webServer>
      <modules runAllManagedModulesForAllRequests="false">
        <remove name="WebDAVModule" />
      </modules>
      <handlers>
        <remove name="WebDAV" />
      </handlers>
    </system.webServer>
    
  • 验证WebAPI路由配置:
    确认生产环境的路由配置无冲突,可启用WebAPI路由调试(添加config.EnableSystemDiagnosticsTracing();)查看请求的路由匹配情况,确认PUT请求能正确映射到目标Action。

  • 检查权限与身份认证:
    验证站点应用程序池身份是否拥有足够资源访问权限,同时确认ImpersonationFilterWebApi过滤器在生产环境是否正常工作——部分权限问题会伪装成「方法不允许」返回405。

  • 排查URL重写规则:
    若站点配置了URL重写,检查规则是否意外改写或拦截了PUT请求,导致请求无法到达WebAPI控制器。

  • 查看IIS日志:
    打开生产环境IIS日志(默认路径C:\inetpub\logs\LogFiles),找到对应405请求的记录,通过sc-substatus和sc-win32-status字段获取更详细的错误原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:27:32