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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:57:28