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

如何在Xamarin Forms PCL应用中用HttpClient接收ASP.NET WebAPI控制器返回内容

在Xamarin Forms PCL中使用HttpClient接收XML格式的WebAPI数据

没问题,我来一步步帮你搞定在Xamarin Forms PCL里获取这个XML格式的学校数据~

第一步:创建对应XML结构的模型类

首先得把WebAPI返回的XML结构映射成C#类,这样才能把XML反序列化成可操作的对象。根据你给的XML示例,咱们创建两个类:School和ArrayOfSchool,还要注意匹配XML的命名空间,用System.Xml.Serialization的特性来对应:

using System.Xml.Serialization;
using System.Collections.Generic;

[XmlRoot(ElementName = "ArrayOfSchool", Namespace = "http://schemas.datacontract.org/2004/07/MasterDetail.Models")]
public class ArrayOfSchool
{
    [XmlElement(ElementName = "School", Namespace = "http://schemas.datacontract.org/2004/07/MasterDetail.Models")]
    public List<School> Schools { get; set; }
}

public class School
{
    [XmlElement(ElementName = "SchoolCode")]
    public string SchoolCode { get; set; }

    [XmlElement(ElementName = "SchoolId")]
    public int SchoolId { get; set; }

    [XmlElement(ElementName = "SchoolName")]
    public string SchoolName { get; set; }
}

第二步:编写HttpClient调用逻辑

接下来就是用HttpClient发送请求并处理XML响应了。记得在Xamarin Forms里要使用异步方法,避免阻塞UI线程。

首先确保你的PCL项目里已经引用了System.Net.Http和System.Xml.Serialization(一般默认就包含,如果没有可以通过NuGet安装)。然后写调用代码,比如放在ViewModel或者页面的代码文件里:

using System.Net.Http;
using System.Xml.Serialization;
using System.IO;
using System.Collections.Generic;
using System.Threading.Tasks;

public async Task<List<School>> GetSchoolsAsync()
{
    var httpClient = new HttpClient();
    // 注意:模拟器测试时要替换localhost:Android用10.0.2.2,iOS可直接用localhost
    string apiUrl = "http://localhost:50908/api/Schools/";

    try
    {
        var response = await httpClient.GetAsync(apiUrl);
        response.EnsureSuccessStatusCode(); // 确保请求返回成功状态

        var xmlContent = await response.Content.ReadAsStringAsync();
        var serializer = new XmlSerializer(typeof(ArrayOfSchool));

        using (var reader = new StringReader(xmlContent))
        {
            var result = (ArrayOfSchool)serializer.Deserialize(reader);
            return result.Schools;
        }
    }
    catch (Exception ex)
    {
        // 这里处理异常,比如网络错误、反序列化失败等
        Console.WriteLine($"获取学校数据失败:{ex.Message}");
        return new List<School>();
    }
}

第三步:关键注意事项

  • 模拟器地址替换:如果用Android模拟器测试,不能直接写localhost,要换成10.0.2.2(这个地址对应主机的localhost);iOS模拟器可以直接用localhost。
  • 网络权限配置:Android项目需要在AndroidManifest.xml里添加网络权限:<uses-permission android:name="android.permission.INTERNET" />;iOS 9+要确保Info.plist里的ATS设置允许非HTTPS请求(因为你的API是HTTP协议)。
  • UI线程调用:一定要用async/await来调用GetSchoolsAsync,比如在页面的OnAppearing方法里:
protected override async void OnAppearing()
{
    base.OnAppearing();
    var schools = await GetSchoolsAsync();
    // 把schools绑定到UI控件,比如ListView的ItemsSource
}

这样就能成功获取并解析WebAPI返回的XML数据啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:31:41