如何在Xamarin.Android客户端与ASP.NET Web Forms服务器间收发JSON?
在ASP.NET Web Forms服务器端接收Xamarin.Android发来的JSON POST请求
先帮你补全客户端可能缺失的完整发送代码(确保请求格式正确),再重点讲服务器端的实现方案:
第一步:补全Xamarin.Android客户端的发送代码
你已经完成了JSON序列化,但还需要把数据写入请求流并设置正确的请求头,这样服务器才能正确识别:
var user = new UserJson { Name = "Vladimir", Age = 21 }; var jsonData = JsonConvert.SerializeObject(user); JsonWiew.Text = jsonData; // 替换成你的服务器实际地址,比如指向后面要创建的Handler var request = (HttpWebRequest)WebRequest.Create("https://你的服务器域名/UserHandler.ashx"); request.Method = "POST"; request.ContentType = "application/json"; // 必须设置这个,告诉服务器接收的是JSON // 将JSON写入请求流 using (var streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write(jsonData); streamWriter.Flush(); } // 可选:处理服务器返回的响应 using (var response = (HttpWebResponse)request.GetResponse()) using (var streamReader = new StreamReader(response.GetResponseStream())) { var result = streamReader.ReadToEnd(); // 这里可以根据返回结果做后续处理,比如提示用户操作成功 }
第二步:服务器端实现(推荐用Generic Handler)
在你的ASP.NET Web Forms项目中,添加一个Generic Handler (.ashx)(比如命名为UserHandler.ashx),这种方式专门用来处理HTTP请求,比Web Forms页面更轻便高效:
using System.IO; using System.Web; using Newtonsoft.Json; public class UserHandler : IHttpHandler { // 定义和客户端完全对应的实体类,保证序列化/反序列化匹配 public class UserJson { public string Name { get; set; } public int Age { get; set; } } public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/json"; // 读取请求中的JSON字符串 string jsonString; using (var reader = new StreamReader(context.Request.InputStream)) { jsonString = reader.ReadToEnd(); } // 把JSON反序列化为实体对象 var user = JsonConvert.DeserializeObject<UserJson>(jsonString); // 这里写你的数据库处理逻辑,比如插入、更新用户数据 // 示例:假设你有封装好的数据库操作类 // UserDBManager.SaveUser(user.Name, user.Age); // 可选:返回处理结果给客户端 var responseData = new { Success = true, Message = "用户数据已成功处理" }; context.Response.Write(JsonConvert.SerializeObject(responseData)); } public bool IsReusable => false; }
备选方案:在Web Forms页面后台处理
如果不想单独创建Handler,也可以直接在某个Web Forms页面的后台代码中处理请求:
using System.IO; using Newtonsoft.Json; public partial class UserProcessPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // 判断是否是POST请求且内容类型为JSON if (Request.HttpMethod == "POST" && Request.ContentType.Contains("application/json")) { // 读取JSON数据 string jsonString; using (var reader = new StreamReader(Request.InputStream)) { jsonString = reader.ReadToEnd(); } // 反序列化并处理业务逻辑 var user = JsonConvert.DeserializeObject<UserJson>(jsonString); // 执行数据库操作... // 返回响应 Response.ContentType = "application/json"; Response.Write(JsonConvert.SerializeObject(new { Success = true })); Response.End(); } } // 对应客户端的实体类 public class UserJson { public string Name { get; set; } public int Age { get; set; } } }
关键注意事项
- 确保服务器端也安装了
Newtonsoft.JsonNuGet包(和客户端使用的版本尽量一致),不然序列化/反序列化会报错。 - 如果遇到跨域问题,需要在Web Forms项目中配置CORS:可以通过添加CORS模块,或者在Handler/页面后台手动设置响应头
context.Response.AddHeader("Access-Control-Allow-Origin", "*");(生产环境建议指定具体域名)。 - 调试时可以先用Postman测试服务器接口,确认能正常接收并处理JSON后,再和客户端联调。
内容的提问来源于stack exchange,提问作者Владимир
相关产品推荐
相关产品推荐

