Windows10下C#可POST至IIS服务器,JS请求报405错误求助
解决IIS环境下JS发送POST请求返回405 Method Not Allowed的问题
排查方向及修复方案
1. 禁用WebDAV模块(最常见原因)
IIS默认启用的WebDAV模块会拦截POST请求,尤其是无扩展名的URL请求。在web.config中添加以下配置禁用它:
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> </handlers> <!-- 保留你已有的requestFiltering配置 --> <security> <requestFiltering> <verbs allowUnlisted="false"> <add verb="GET" allowed="true" /> <add verb="POST" allowed="true" /> <add verb="DELETE" allowed="true" /> <add verb="PUT" allowed="true" /> </verbs> </requestFiltering> </security> </system.webServer>
2. 修正jQuery请求的参数传递方式
你的jQuery代码把data拼接到URL的查询字符串中,这会导致请求格式不符合POST规范(POST数据应放在请求体而非URL)。修改代码如下:
function postHttpDoc(url, data) { var jqxhr = $j.post(url, data) .done(function () { alert("second success"); }) .fail(function () { alert("error"); }) .always(function () { alert("finished"); }); }
jQuery会自动将data编码为application/x-www-form-urlencoded格式并放入请求体,和原生JS请求保持一致。
3. 检查路径级别的HTTP谓词限制
全局Handler Mappings设置没问题,但具体路径可能有单独的限制:
- 打开IIS管理器,定位到目标站点/应用程序
- 右键选择「请求筛选」,切换到「HTTP谓词」标签
- 确认POST请求未被拒绝,且该路径没有单独的谓词规则
4. 确认后端接口允许POST请求
如果目标URL是ASP.NET接口:
- ASHX文件:确保
ProcessRequest方法没有限制请求方法 - MVC控制器:Action方法需标记
[HttpPost]属性 - Web API:控制器方法需对应POST特性或路由配置
5. 排查URL重写规则干扰
若配置了URL重写模块,部分规则可能篡改请求方法或拦截POST请求。可暂时禁用重写规则,测试请求是否恢复正常。
内容的提问来源于stack exchange,提问作者Velocedge
相关产品推荐
相关产品推荐

