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

Asp.net服务端代码执行两次返回失败回调,仅新部署服务器出现该问题

故障排查与解决方案

常见触发原因

由于该问题仅出现在新部署的服务器上,原有服务器运行正常,100%是新服务器的配置差异导致,优先排查以下场景:

  • HTTP重定向规则触发:新服务器IIS配置了HTTP强制跳转HTTPS、无尾斜杠跳转带尾斜杠这类规则时,你发送的POST请求会先被301/302重定向,浏览器处理重定向时默认会将POST改为GET、丢弃请求体,第一次POST请求会触发一次服务端代码执行,第二次GET请求无法匹配仅接受POST的WebMethod,最终返回错误触发error回调,相当于执行了两次逻辑。
  • CORS预检请求未正确处理:如果前端域名和接口域名不一致,带content-type: application/json的POST属于复杂跨域请求,浏览器会先发送OPTIONS类型的预检请求,若服务端没有过滤OPTIONS请求,会被当成正常请求处理触发一次逻辑,若预检请求返回不符合规范,后续实际POST请求不会发送或被拦截,直接触发error回调,也会出现两次执行的现象。
  • IIS全局模块重复处理:新服务器可能额外安装了安全审计、请求过滤类的模块,或ASP.NET管道配置为集成模式与原有服务器的经典模式不一致,导致单次请求被管道处理两次。

排查步骤

  1. 打开浏览器F12开发者工具,切换到「网络」面板,复现请求后查看完整的请求链路:
    • 确认是否存在301/302重定向记录
    • 确认是否存在OPTIONS类型的请求
    • 查看两次请求的状态码、响应头、响应内容
  2. 用Postman直接向接口地址发送单次POST请求,若返回正常则可确认是浏览器侧触发的两次请求,排除服务端代码本身的问题。
  3. 对比新老服务器的Web.config、IIS站点配置,重点核对重写规则、CORS配置、应用程序池模式、请求过滤规则的差异。

对应解决方案

重定向问题修复

  • 前端直接使用与服务器配置匹配的接口地址(比如直接写HTTPS地址、带正确的路径格式),避免触发重定向
  • 若要保留重定向规则,可在规则中排除*.aspx/*路径的接口请求,不对这类接口做重定向处理

CORS预检问题修复

在项目Web.config的<system.webServer>节点下添加以下配置,允许OPTIONS请求处理:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="你的前端域名" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<handlers>
  <remove name="OPTIONSVerbHandler" />
</handlers>

同时在Global.asax中添加以下逻辑,直接处理预检请求:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if (Request.HttpMethod == "OPTIONS")
    {
        Response.StatusCode = 200;
        Response.End();
    }
}

管道配置问题修复

将新服务器的应用程序池模式调整为和老服务器一致的经典/集成模式,逐个排查IIS站点额外安装的第三方模块,禁用后重试验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:06:01