C#序列化JSON返回前端JS解析报Unexpected token <错误如何解决
ASP.NET Web Form 返回JSON附带多余HTML的解决方案
问题原因
ASP.NET Web Form的aspx页面默认会走完完整的页面生命周期,你在Page_Load中输出JSON后,后续的页面渲染流程仍会执行,自动拼接页面的HTML代码到响应内容末尾,导致JSON格式被破坏。
可用解决方法
- 方法1:输出JSON后直接终止当前响应(最快修复)
修改你的Page_Load代码,输出JSON前清空响应内容、设置正确的响应头,输出后直接终止响应,阻止后续HTML渲染:
protected void Page_Load(object sender, EventArgs e) { Mydata mydata = new Mydata(); mydata.name = "john"; var json = new JavaScriptSerializer().Serialize(mydata); // 清空已生成的响应内容,避免冗余输出 Context.Response.Clear(); // 设置JSON格式的响应头,便于前端识别 Context.Response.ContentType = "application/json"; Context.Response.Write(json); // 直接终止响应,不再执行后续页面渲染逻辑 Context.Response.End(); }
- 方法2:使用一般处理程序(.ashx)做接口(规范方案)
aspx页面本质是用来渲染Web页面的,天生带有HTML渲染逻辑,做数据接口更推荐用专门的一般处理程序,不会自动生成多余HTML:
- 右键项目添加「一般处理程序」,命名为
GetData.ashx - 写入核心逻辑:
public class GetData : IHttpHandler { public void ProcessRequest(HttpContext context) { Mydata mydata = new Mydata(); mydata.name = "john"; var json = new JavaScriptSerializer().Serialize(mydata); context.Response.ContentType = "application/json"; context.Response.Write(json); } public bool IsReusable { get { return false; } } }
- 前端请求地址替换为
GetData.ashx即可。
内容的提问来源于stack exchange,提问作者Yan Kleber
相关产品推荐
相关产品推荐

