我们有使用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的所有方法才能使用这些库之一?如果可以的话,我可以得到一些链接到如何重写它们,以便它们可以接受吗?
您是否尝试过将HttpClient Implementation
设置为Xamarin.iOS
将其更改为HttpClient Stack或NSUrlSession