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

