Xamarin 表单 HttpClient 卡住

Posted

技术标签:

【中文标题】Xamarin 表单 HttpClient 卡住【英文标题】:Xamarin Form HttpClient Stuck 【发布时间】:2016-04-02 00:09:04 【问题描述】:

我正在尝试从 soundcloud API 获得响应。这是我的代码。

public static async Task<string> GetTheGoodStuff()
  
     var client = new HttpClient(new NativeMessageHandler());
     var response = await client.GetAsync("http://api.soundcloud.com/playlists?client_id=17ecae4040e171a5cf25dd0f1ee47f7e&limit=1");
     var responseString = response.Content.ReadAsStringAsync().Result;
     return responseString;
   

但它卡在var response = await client.GetAsync 上。我该如何解决这个问题?

谢谢!

【问题讨论】:

没有new NativeMessageHandler() 你的代码对我有用...顺便说一句,不要阻止Result 使用await response.Content.ReadAsStringAsync() 您是否尝试在 PCL 项目中运行此代码? @Eser 我认为 OP 正在使用 ModernHttpClient,因此需要在 PCL 和本机项目中引用它。 【参考方案1】:

我只是在 PCL 中使用了您的代码,我唯一更改的是 url(到 https)以满足 ios ATS 要求,并从异步方法中调用它。似乎在 iOS 设备上运行良好。我确实在 PCL 中获取了对 Microsoft.Net.Http 的引用,在 PCL 和特定于平台的项目中(通过 NuGet)获取了 ModernHttpClient

您在某些 PCL 视图模型类中的代码:

using System.Net.Http;
using System.Threading.Tasks;
using ModernHttpClient;

public class ItemsViewModel


...

    public async Task<string> GetPlaylist()
    
        // Use https to satisfy iOS ATS requirements.
        var client = new HttpClient(new NativeMessageHandler());
        var response = await client.GetAsync("https://api.soundcloud.com/playlists?client_id=17ecae4040e171a5cf25dd0f1ee47f7e&limit=1");
        var responseString = await response.Content.ReadAsStringAsync();
        return responseString;
    

...


然后在实例化并使用视图模型实例的 PCL 页面类中:

public partial class ItemsPage : ContentPage

    public ItemsPage()
    
        InitializeComponent();
        Vm = new ItemsViewModel();
        BindingContext = Vm;
    

    protected override async void OnAppearing()
    
        var playlist = await Vm.GetPlaylist();
        // Do something cool with the string, maybe some data binding.
    

    // Public for data binding.
    public ItemsViewModel Vm  get; private set; 

希望这会有所帮助。

【讨论】:

【参考方案2】:

我也有同样的问题。我通过以下方式修复了它:

var response = httpClient.GetAsync(ApiUrl).ConfigureAwait(false).GetAwaiter().GetResult();

你可以试试。

【讨论】:

以上是关于Xamarin 表单 HttpClient 卡住的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 表单 HttpClient GetAsync

当 API 关闭时,Xamarin 表单依赖注入 HttpClient 超时不起作用

在返回导航中跳过 xamarin 表单中的页面

MvvmCross picturechoosen 插件和相机卡住问题

C# Xamarin 没有收到来自 HttpClient 的响应

HttpClient 不可用共享库项目 Xamarin