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

如何在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.Json NuGet包(和客户端使用的版本尽量一致),不然序列化/反序列化会报错。
  • 如果遇到跨域问题,需要在Web Forms项目中配置CORS:可以通过添加CORS模块,或者在Handler/页面后台手动设置响应头context.Response.AddHeader("Access-Control-Allow-Origin", "*");(生产环境建议指定具体域名)。
  • 调试时可以先用Postman测试服务器接口,确认能正常接收并处理JSON后,再和客户端联调。

内容的提问来源于stack exchange,提问作者Владимир

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:26:48