Xamarin.forms 首先在Xamarin的HTTPClient上尝试。表单不起作用

Xamarin.forms 首先在Xamarin的HTTPClient上尝试。表单不起作用,xamarin.forms,httpclient,Xamarin.forms,Httpclient,我知道这应该很简单,所以我显然遗漏了一些东西 我正在编写一个非常简单的Xamarin.Forms应用程序,将其作为共享项目的MainPage.xaml.cs public partial class MainPage : ContentPage { public MyClass myClassInstance { get; set; } public MainPage() { InitializeComponent(); Downloa

我知道这应该很简单,所以我显然遗漏了一些东西

我正在编写一个非常简单的Xamarin.Forms应用程序,将其作为共享项目的
MainPage.xaml.cs

public partial class MainPage : ContentPage
{
    public MyClass myClassInstance { get; set; }

    public MainPage()
    {
        InitializeComponent();

        DownloadDataAsync();            
    }

    private async void DownloadDataAsync()
    {
        string page = @"http://www.blaw.com:80/foo/bar"; 

        try
        {
            HttpClient client = new HttpClient();
            var uri = new Uri(string.Format(page, string.Empty));

            var response = await client.GetAsync(uri);  <---  BONK!
            if (response.IsSuccessStatusCode)
            {
                var responseString = await response.Content.ReadAsStringAsync();
                XmlSerializer ser = new XmlSerializer(typeof(MyClass));
                using (TextReader tr = new StringReader(responseString))
                {
                    myClassInstance = (MyClass)ser.Deserialize(tr);
                }
            }
            else
                System.Diagnostics.Debug.WriteLine(response.StatusCode.ToString());
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine(ex.Message);

        }
    }
}
public分部类主页面:ContentPage
{
公共MyClass myClassInstance{get;set;}
公共主页()
{
初始化组件();
下载DataAsync();
}
私有异步void DownloadDataAsync()
{
字符串页=@“http://www.blaw.com:80/foo/bar"; 
尝试
{
HttpClient=新的HttpClient();
var uri=新的uri(string.Format(page,string.Empty));

var response=await client.GetAsync(uri);从构造函数调用异步方法不是一个好主意。这将在控制台应用程序中起作用,但在UI应用程序中不起作用。因为这将阻止UI线程,并且由于死锁,控件永远不会返回到代码


如果您可以在OnAppearing中调用异步方法,它应该可以正常工作。

您可以编写“uri”吗到控制台验证它是否是您期望的正确URL?此外,这是否在iOS设备上工作,或者您是否遇到相同的问题?我使用了断点来验证uri是否正确。此外,如果我在windows控制台应用程序中使用此代码,它工作正常。我还没有尝试为iOS编译…我要测试的iPhone不是这里还没有。一切看起来都很好。我建议尝试使用Postman点击端点,并验证您是否可以从中读取数据。然后我会检查是否在客户端配置上发送了正确的头。即使调用在InitializeComponent()调用之后,您也应该这样做吗?