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

ASP.NET MVC使用ASP.NET Identity时jQuery Ajax报parse error问题求助

问题原因

你缺失的是ASP.NET MVC内置的AntiForgeryToken(跨站请求伪造防伪令牌)。默认情况下ASP.NET Identity相关的控制器都会全局或针对POST接口添加[ValidateAntiForgeryToken]校验特性,请求未携带合法令牌时会直接返回401状态码,不会进入你的Register业务方法,和你遇到的现象完全匹配。

解决方案

方案1(推荐,保留安全校验)

  1. 在发起请求的Razor视图中添加令牌生成代码,会自动渲染一个隐藏的令牌输入框:
@Html.AntiForgeryToken()
  1. 修改Ajax请求代码,在请求头中携带防伪令牌:
// 先获取页面生成的防伪令牌
const csrfToken = $('input[name="__RequestVerificationToken"]').val();

$.ajax({
    type: "POST",
    url: '/Account/Register',
    data: JSON.stringify(data),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    // 添加请求头携带令牌
    headers: {
        "__RequestVerificationToken": csrfToken
    },
    success: function (response) {
        console.log(response)
    },
    error: function (response) {
        console.log(response)
    }
});
  1. 修正后端Action的参数绑定规则,因为你提交的是JSON格式数据,需要给参数加[FromBody]标记才能正确接收:
[HttpPost]
public async Task<JsonResult> Register([FromBody] string data)
{
    // 原有业务逻辑不变
}

方案2(不推荐,仅临时调试用)

如果不需要做CSRF校验,可以直接在Register Action上添加[IgnoreAntiforgeryToken]特性,跳过令牌校验,无需修改前端代码:

[HttpPost]
[IgnoreAntiforgeryToken]
public async Task<JsonResult> Register(string data)
{
    // 原有业务逻辑不变
}

注意:该方案会存在CSRF攻击风险,不建议在生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:18:02