HttpWebRequest到NSUrlConnection / NSUrlSession或HttpClient(带有ModerHttpClient库)

问题描述 投票:1回答:1

我们有使用Xamarin Cross Platform编写的代码,该代码可与带客户端隧道软件的Android一起使用:

           string body = "<rest_access/>";

           byte[] dataByte = Encoding.ASCII.GetBytes(body);

           HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint + @"/rest_access");
           request.Method = "POST";
           request.ContentType = "application/xml";
           request.Accept = "application/json";

           var credentials = System.Text.Encoding.ASCII.GetBytes(username + ":" + password);
           string encodedCredentials = System.Convert.ToBase64String(credentials);
           request.Headers.Add(HttpRequestHeader.Authorization, "Basic " + encodedCredentials);

           request.ContentLength = dataByte.Length;

           Stream stream = request.GetRequestStream();

           stream.Write(dataByte, 0, dataByte.Length);

           try
           {
               HttpWebResponse response = (HttpWebResponse)request.GetResponse();
               StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
               string responseString = reader.ReadToEnd().ToString();

               dynamic authResponse = JsonConvert.DeserializeObject(responseString);
               //Console.WriteLine("Auth response:\n" + authResponse);

               accessKey = authResponse.rest_access.access_key;

               //Console.WriteLine("kljuc " + accessKey);

               return accessKey;
           }
           catch (Exception ex)
           {
               Console.WriteLine(ex.Message);
               return "Unexpected Error";
           }

但是,当针对iOS应用程序隧道使用相同的代码时,似乎不存在。 在他们的文档中,我们发现:

使用Xamarin开发平台构建的应用程序可以通过各种方式访问​​网络服务器。 AppTunnel与 仅支持HTTP / S隧道,如下所示: •该应用程序使用通过Xamarin.iOS向C#公开的NSURLConnection或NSURLSession API。 捆绑。 •该应用程序使用带有NSURLSession的ModernHttpClient库。 ModernHttpClient库具有 CFNetwork无法正常工作。 例如,应用程序按以下方式初始化ModernHttpClient的实例: var httpClient = new HttpClient(new NativeMessageHandler());

这是否意味着我们必须重写其中使用HttpWebRequest的所有方法才能使用这些库之一?如果可以的话,我可以得到一些链接到如何重写它们,以便它们可以接受吗?

c# xamarin httpwebrequest nsurlconnection
1个回答
0
投票

您是否尝试过将HttpClient Implementation设置为Xamarin.iOS

将其更改为HttpClient StackNSUrlSession

© www.soinside.com 2019 - 2024. All rights reserved.