gpt4 book ai didi

c# - HttpClient 不适用于 android

转载 作者:行者123 更新时间:2023-11-30 20:27:33 28 4
gpt4 key购买 nike

我正在制作 Xamarin.Forms 应用程序,它应该从 api 获取 JSON,然后允许显示它。到目前为止我的代码:

    public async void jsonDownload()
{
connect();
await downloadData();


}
public void connect()
{
client = new HttpClient();
client.MaxResponseContentBufferSize = 256000;
}
public async Task<List<Jsonclass>> downloadData()
{

String url = "https://my-json-server.typicode.com/kgbzoma/TestJsonFile/all";
var uri = new Uri(string.Format(url, string.Empty));
try
{

var response = await client.GetAsync(uri).ConfigureAwait(false);
response.EnsureSuccessStatusCode(); //NEVER GET HERE

var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
List = JsonConvert.DeserializeObject<List<Jsonclass>>(content);

}catch (Exception ex)
{
Debug.WriteLine(@" Error {0}", ex.Message);
}
return List;
}

问题是代码甚至不去 response.EnsureSuccessStatusCode();所以我的对象列表是空的。在 UWP 版本上,它可以正常工作。我在这里遇到异常:System.Net.Http.HttpRequestException 消息发送请求时发生错误。

最佳答案

SecureChannelFailure (The authentication or decryption has failed.)

System.Net.WebException: Error: TrustFailure

Mono.Security.Protocol.Tls.TlsException: Invalid certificate received from server.

默认,Xamarin.Android 使用不支持 TLS 1.2 的较旧的 Mono Managed HttpClient 处理程序。

打开您的 Xamarin.Android 项目设置,转到 Build/Android Build/General 并使用 AndroidClientHandler

enter image description here

这会将以下 MSBuild 属性直接添加到您的 .csproj

<AndroidHttpClientHandlerType>Xamarin.Android.Net.AndroidClientHandler</AndroidHttpClientHandlerType>
<AndroidTlsProvider>btls</AndroidTlsProvider>

注意:如果在 .csproj 中手动执行此操作,您需要将它们添加到调试和发布 PropertyGroup。

或者以编程方式设置 HttpClient 以使用它:

client = new HttpClient(new AndroidClientHandler());

注意:您应该查看这些类型错误的InnerException

catch (Exception ex)
{
Console.WriteLine(@" Error {0}", ex.Message);
Console.WriteLine(@" Error {0}", ex.InnerException?.Message);
}

关于c# - HttpClient 不适用于 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48475378/

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