VS2017 C# WebForms中$.ajax POST无法触发aspx后台WebMethod方法
问题原因及解决方案
- 参数结构不匹配
WebMethod要求传入的JSON数据的键名必须和后台方法的参数名完全一致。你当前AJAX直接传递字符串,没有封装为对应参数名的结构,后台无法匹配到GetApi(string searchData)方法,会直接跳过方法调用,返回页面默认内容导致AJAX误认为请求成功。
修正方法:将AJAX的data字段改为封装后的JSON字符串:
data: JSON.stringify({ searchData: trimsearchString })
- WebService协议配置缺失
请检查Web.config文件的<system.web>节点下是否开启了HttpPost协议支持,默认部分环境会禁用该协议导致WebMethod无法响应POST请求:
<system.web> <webServices> <protocols> <add name="HttpPost"/> </protocols> </webServices> </system.web>
- 路由拦截导致路径不匹配
如果项目开启了ASP.NET友好URL或者自定义路由,会拦截.aspx/[方法名]格式的请求,重定向到普通页面路由,导致WebMethod无法被命中。需要在路由配置文件(一般是RouteConfig.cs)中添加忽略规则:
routes.Ignore("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });
- 验证逻辑拦截请求
如果页面开启了表单身份验证、CSRF校验等逻辑,未携带验证凭证的AJAX请求会被重定向到登录页/错误页,此时请求状态码为200但实际返回的是页面HTML内容,并非WebMethod的响应。可以通过浏览器开发者工具的「网络」标签查看该POST请求的实际响应内容,确认是否被拦截。
修正后完整AJAX代码示例
var searchString = JsonData; var trimsearchString = searchString.replace(/,/g, ''); $.ajax({ type: "POST", url: 'Default.aspx/GetApi', data: JSON.stringify({ searchData: trimsearchString }), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { console.log('接口返回内容:', data); alert('success'); }, error: function (errordata) { console.log(errordata); alert('请求出错'); } });
内容的提问来源于stack exchange,提问作者user616076
相关产品推荐
相关产品推荐

