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

如何从Xamarin Forms向Rest Web API服务端发送List<>类型数据

问题原因

你现有代码的核心问题是直接将List<int>类型的adsIdList拼接到URL路径中,C#默认调用对象的ToString()方法只会输出System.Collections.Generic.List1[System.Int32]`这类类型标识字符串,完全没有传递实际的ID值,自然无法被服务端正确识别。

解决方案

根据你的接口规范,可选两种常用实现方式:

方案1:GET请求传递(适合ID数量较少的场景)

将ID列表转为逗号分隔的字符串,放到URL的查询参数中传递:

public async Task<TEntity> GetByAdsIdList<TEntity>(string dbTableName, string apiMethodName, List<int> adsIdList)
{
    // 把ID列表拼接为逗号分隔的字符串
    string idsStr = string.Join(",", adsIdList);
    // 组装带查询参数的请求地址
    BaseOfApiBridge.UrlMaker($"{dbTableName}/{apiMethodName}?adsIdList={idsStr}");

    string result = await BaseOfApiBridge.HttpClientBridge.GetStringAsync(BaseOfApiBridge.Url);

    return JsonConvert.DeserializeObject<TEntity>(result);
}
  • 服务端适配参考(ASP.NET Core为例):接口参数添加[FromQuery]修饰,即可自动将逗号分隔的字符串解析为List<int>类型。

方案2:POST请求传递(适合ID数量多、无长度风险的场景)

将列表放到请求体中传递,避免GET请求的URL长度限制:

public async Task<TEntity> GetByAdsIdList<TEntity>(string dbTableName, string apiMethodName, List<int> adsIdList)
{
    BaseOfApiBridge.UrlMaker($"{dbTableName}/{apiMethodName}");
    // 序列化列表为JSON格式的请求体
    var requestContent = new StringContent(JsonConvert.SerializeObject(adsIdList), System.Text.Encoding.UTF8, "application/json");
    
    var response = await BaseOfApiBridge.HttpClientBridge.PostAsync(BaseOfApiBridge.Url, requestContent);
    // 校验请求是否成功
    response.EnsureSuccessStatusCode();
    string result = await response.Content.ReadAsStringAsync();

    return JsonConvert.DeserializeObject<TEntity>(result);
}
  • 服务端适配参考(ASP.NET Core为例):接口声明为POST请求,参数添加[FromBody]修饰即可直接接收列表参数。

注意事项

  • 如果服务端要求的列表分隔符不是逗号,修改string.Join的第一个参数即可匹配要求
  • POST方案对传输的列表长度没有限制,是更通用的实现方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:45:01