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 超时不起作用
MvvmCross picturechoosen 插件和相机卡住问题