jQuery Ajax调用指定aspx.cs方法时错误请求首页后台文件问题
问题描述
使用Ajax调用aspx.cs文件中的后台方法时,即使明确指定了目标请求文件,请求仍会被发送至错误的aspx文件,所有调用尝试都会固定请求首个加载页面的aspx.cs后台文件。
使用的Ajax调用代码如下:
$.ajax({ type: "POST", url: "NewLayerPage.aspx/getData2", data: dataToSend, dataType: "json", contentType: "application/json; charset=utf-8", success: function (data) { console.log(dataToSend); console.log("data sended"); }, failure: function (response) { alert(response.d); } });
执行上述代码时,程序不会到NewLayerPage.aspx.cs中查找getData2方法,反而会去FirstPage.aspx.cs中查找该方法。已确认NewLayerPage中的对应方法本身可正常运行:将该方法复制粘贴到FirstPage中后,调用无任何异常。
补充验证现象
- 注释掉
FirstPage中的对应方法后,调用直接触发错误 - 保留
FirstPage中的该方法时,调用可正常返回结果,无报错
问题根因
该问题本质是相对路径解析偏差+ASP.NET请求路由规则兜底匹配共同导致的,核心触发场景有三类:
- Ajax代码中写的是相对路径,解析基准和预期不符。如果脚本写在外部JS文件、或者当前发起请求的页面位于站点子目录,相对路径会以当前宿主页面的URL为基准解析,不会按预期定位到根目录下的
NewLayerPage.aspx,路径不存在时IIS会触发兜底规则,把请求转发到站点默认首页也就是首个加载的FirstPage.aspx处理。 - 站点配置了URL重写、WebForm路由规则,拦截了所有aspx后缀的POST请求,统一转发到
FirstPage.aspx。 - 部署时
NewLayerPage.aspx的页面头声明Inherits属性和后台codebehind类不匹配,请求到达文件后无法找到对应后台类,触发了自定义错误页的转发逻辑,把请求导到了FirstPage。
修复方案
按优先级依次排查处理:
- 优先替换URL为根路径绝对路径,不要用相对路径。把Ajax配置里的
url: "NewLayerPage.aspx/getData2"改成url: "/NewLayerPage.aspx/getData2";如果站点部署在IIS虚拟目录下,就在aspx内联脚本里用服务端解析路径:url: '<%= ResolveUrl("~/NewLayerPage.aspx/getData2") %>',注意这句不能放在外部JS文件里,否则服务端不会解析。 - 打开浏览器F12开发者工具,切换到网络面板,查看实际发起的POST请求目标地址,确认是否真的发送到了
NewLayerPage.aspx路径,绝大多数场景下你会看到实际请求路径和预期不符,要么多了目录层级,要么被重写到了FirstPage。 - 检查
NewLayerPage.aspx顶部的<%@ Page %>标签,确认Inherits属性的命名空间、类名和NewLayerPage.aspx.cs中定义的类完全一致;同时确认后台getData2方法满足WebMethod要求:使用public static修饰、添加了[System.Web.Services.WebMethod]特性。 - 检查
Global.asax、RouteConfig.cs以及IIS层面的URL重写规则,确认没有拦截aspx POST请求转发到默认首页的配置。
内容的提问来源于stack exchange,提问作者Gabriel P
相关产品推荐
相关产品推荐

