Forms(Android :)如何正确实例化要在共享项目中使用的本机HttpClient

时间:2019-07-17 16:24:03

标签: xamarin.forms

我不知道如何为共享的Xamarin.Forms项目正确实例化本机Android HttpClient。我已经完成阅读和搜索。

问题: 1.我如何确保我的Android客户端将使用本机HttpClient进行各种网络传输,甚至用于共享代码中定义的操作? 2.我必须在代码的Project.Android项目部分中实例化HttpClient并将该对象注入到Project.App()构造函数(如Project.App(HttpClient httpClient))中,还是通过某种构建自动执行该功能,时间魔术? 3.目前,我的代码可以使用默认的构造函数构建的HttpClient很好,但是在实例化本机HttpClient时可以使用构造函数参数吗?

  • 我尝试在Android项目中实例化HttpClient(),但无法做到这一点:它在名称空间Assembly中不知道
  • 我在共享的Xamarin.Forms项目上的HttpClient实例化点上设置了一个断点,它似乎是System.Net.Http HttpClient。所以我认为是受管理的客户...

当前代码段和设置: -范围:Xamarin.Forms Android -体系结构:armeaby-v7a; arm64-v8a(在单独的配置中具有x86,效果更好) -HttpClient实施:Android -SSL / TLS实施:默认(本机TLS 1.2+) -Xamarin.Forms 4.1.0.581479 -SDK:NETStandard 2.0.3

Project.Android MainActivity.cs:

using Android.App;
using Android.Content.PM;
using Android.OS;

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);            
        LoadApplication(new App());
    }
}


我在共享项目中的HttpClient实例化: 基本上在首次需要时使用默认构造函数创建对象,并在每次操作中重复使用

private static Lazy httpClient = new Lazy(
() =>
{
var client = new HttpClient();
return client;
});

1 个答案:

答案 0 :(得分:1)

Android的最终目的-SSL / TLS实施可提高性能,因此我想建议您使用NuGet包 modernhttpclient 。 在代码中替换下面的行

   private static Lazy httpClient = new Lazy(() =>
     {   
      var client = new HttpClient(new NativeMessageHandler());
      return client;
     });

使用 NativeMessageHandler ,您可以处理Android和iOS,

希望这会对您有所帮助。