C# ASPX页面AJAX请求返回401认证失败问题求助
AJAX请求调用WebMethod失败排查与解决
问题详情
尝试通过AJAX调用ASP.NET WebMethod实现交互但未成功,相关代码与错误现象如下:
后端代码(Mypage.aspx.cs)
[WebMethod] public static string doSomething(int id) { return "hello"; }
前端AJAX代码(Mypage.aspx)
$.ajax({ type: "POST", url: "Mypage.aspx/doSomething", data: "{'id':'1'}", dataType: "json", contentType: "application/json; charset=utf-8", headers: { "Authorization": 'Bearer <%: Token %>' }, success: function (data) { console.log(data); var returnedstring = data.d; var jsondata = $.parseJSON(data.d); } });
错误表现
- 当设置
contentType: "application/json; charset=utf-8"时,返回认证失败响应:
{ "Message": "Authentication failed.", "StackTrace": null, "ExceptionType": "System.InvalidOperationException" }
- 若将Content-Type改为
"text/json",会触发两次请求:第一次返回301重定向状态,第二次返回完整页面,相关请求截图:



解决思路与方案
1. 认证失败问题处理
- 验证Token有效性:检查
<%: Token %>输出的Bearer令牌是否过期、格式是否符合认证机制要求(如JWT格式),可在浏览器控制台直接打印Token值确认。 - 调整WebMethod认证权限:若该接口无需身份验证,可添加
[AllowAnonymous]属性;若需认证,确保当前请求的Token已通过服务器验证:
[WebMethod] [AllowAnonymous] // 无需认证时添加 public static string doSomething(int id) { return "hello"; }
- 检查路径正确性:确认
Mypage.aspx/doSomething路径无大小写错误(IIS默认路径大小写敏感),且未被站点重写规则拦截。
2. 请求格式修正
- 标准化JSON数据:前端传入的
data需符合标准JSON格式,将单引号改为双引号,或直接用JSON.stringify生成数据,避免解析失败:
data: JSON.stringify({ id: 1 }),
- 保持正确Content-Type:ASP.NET WebMethod仅支持
application/json作为请求内容类型,text/json会导致服务器无法解析请求,需保留contentType: "application/json; charset=utf-8"。
3. 重定向问题排查
- 检查站点URL重写规则,确认未将
aspx请求强制重定向到其他路径。 - 排查Mypage.aspx页面的
Page_Load等事件,确保没有页面级的跳转逻辑干扰AJAX请求。
内容的提问来源于stack exchange,提问作者TheHunter Shergill
相关产品推荐
相关产品推荐

