gpt4 book ai didi

c# - 如何在 MvvmCross xamarin 中设置请求超时并获取 HttpRequest 的响应代码

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:29 25 4
gpt4 key购买 nike

我为构建的代码:

 public class RestService : IRestService
{
public async Task<StellaData> GetStellConfigData()
{
try
{
//Declare a Http client
HttpClient client = new HttpClient();
//Add a Base URl
//client.BaseAddress = new Uri(Constants.MUrl);
//Add the response type
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//Add the API
var response =await client.GetStringAsync(new Uri(Constants.mUrl));

var myItems = Newtonsoft.Json.JsonConvert.DeserializeObject<StellaData>(response);
return myItems;

}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}

return null;
}
}

我想做什么:

  1. 为请求设置超时
  2. 捕获请求超时的相关异常
  3. 获取请求的响应码

最佳答案

这个问题实际上与 MvvmCross、Xamarin 或 Android 无关,因为您使用的是与任何 .NET 应用程序中相同的 HTTP 客户端。不过,HttpClient 有一个Timeout 属性,您可以设置该属性以确保您的请求在特定时间间隔后超时。我已将 GetStringAsync 更改为 GetAsync,因为如果请求超时,GetAsync 将抛出 TaskCanceledException,您可以捕捉和处理。 GetStringAsync 将在内部处理超时,您将无法捕获它。我已经重写了你的方法来实现这一点(这个例子有 30 秒的超时),并将状态代码分配给一个变量供你使用:

public async Task<StellaData> GetStellConfigData()
{
try
{
using (var client = new HttpClient
{
Timeout = TimeSpan.FromMilliseconds(30000)
})
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var response = await client.GetAsync(new Uri(Constants.mUrl));

HttpStatusCode statusCode = response.StatusCode;

var myItems = Newtonsoft.Json.JsonConvert.DeserializeObject<StellaData>(await response.Content.ReadAsStringAsync());
return myItems;
}

}
catch (TaskCanceledException tcex)
{
// The request timed out
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}

return null;
}

关于c# - 如何在 MvvmCross xamarin 中设置请求超时并获取 HttpRequest 的响应代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44225072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com