部署至IIS后C# Web API POST请求报405方法不允许(开发模式正常)
解决IIS部署后Web API POST请求405错误的方案
常见原因及处理步骤
1. 禁用IIS的WebDAV模块
IIS默认启用的WebDAV模块会拦截PUT/POST类请求,直接导致405错误,处理方式:
- 打开IIS管理器,找到目标站点,进入模块功能,右键禁用
WebDAVModule - 或在站点的
web.config中添加配置移除WebDAV相关处理:
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> </handlers> </system.webServer>
2. 明确CORS配置规则
仅全局启用config.EnableCors()可能在部署环境中生效异常,建议指定具体策略:
- 在
WebApiConfig.cs中配置允许的源、方法:
// 生产环境建议替换*为具体业务域名,避免安全风险 var corsPolicy = new EnableCorsAttribute("*", "*", "*"); config.EnableCors(corsPolicy);
- 检查控制器/Action上是否存在冲突的
[DisableCors]特性
3. 修正IIS请求映射配置
确保IIS将API请求正确转发至ASP.NET模块:
- 检查站点处理程序映射,确认
ExtensionlessUrlHandler-Integrated-4.0已启用,且包含POST方法 - 可在
web.config中补充配置:
<system.webServer> <handlers> <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>
4. 优化前端请求格式
前端axios请求中无需手动序列化JSON,axios会自动处理,手动序列化可能导致Content-Type匹配问题,修改请求代码:
axios({ method: 'POST', url: URL, data: { partyid: '1234567' }, headers: { 'content-type': 'application/json' } })
内容的提问来源于stack exchange,提问作者Rajendraprasad Taduka
相关产品推荐
相关产品推荐

