C# HttpWebRequest到NSUrlConnection/NSUrlSession或HttpClient(使用ModerHttpClient库)

C# HttpWebRequest到NSUrlConnection/NSUrlSession或HttpClient(使用ModerHttpClient库),c#,xamarin,httpwebrequest,nsurlconnection,C#,Xamarin,Httpwebrequest,Nsurlconnection,我们有Xamarin跨平台编写的代码,适用于Android和客户端隧道软件: string body = "<rest_access/>"; byte[] dataByte = Encoding.ASCII.GetBytes(body); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endpoint + @"/rest_access");

我们有Xamarin跨平台编写的代码,适用于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";
           }
string body=“”;
字节[]数据字节=Encoding.ASCII.GetBytes(正文);
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(端点+@“/rest_访问”);
request.Method=“POST”;
request.ContentType=“应用程序/xml”;
request.Accept=“application/json”;
var-credentials=System.Text.Encoding.ASCII.GetBytes(用户名+“:”+密码);
string encodedCredentials=System.Convert.ToBase64String(凭证);
request.Headers.Add(HttpRequestHeader.Authorization,“Basic”+encodedCredentials);
request.ContentLength=dataByte.Length;
Stream=request.GetRequestStream();
stream.Write(数据字节,0,数据字节.Length);
尝试
{
HttpWebResponse=(HttpWebResponse)request.GetResponse();
StreamReader=新的StreamReader(response.GetResponseStream(),Encoding.UTF8);
字符串responseString=reader.ReadToEnd().ToString();
dynamic authResponse=JsonConvert.DeserializeObject(responseString);
//Console.WriteLine(“身份验证响应:\n”+authResponse);
accessKey=authResponse.rest\u access.access\u key;
//控制台写入线(“kljuc”+accessKey);
返回accessKey;
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
返回“意外错误”;
}

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

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

这是否意味着我们必须重写所有在其中使用HttpWebRequest的方法,以使用其中一个LIB?

如果可以,我可以获得一些链接,以了解如何重写这些文件,从而使其可以接受吗?

您是否尝试在中为
Xamarin.iOS
设置
HttpClient实现


将其更改为
nsursession
Managed

是否尝试在中为
Xamarin.iOS
设置
HttpClient实现

将其更改为
nsursession
Managed

我们已经将nsursession(iOS 7+)用于HttpClient实现,它被设置为默认值。我们将尝试切换到托管。我们已经将NSUrlSession(iOS 7+)用于HttpClient实现,它已设置为默认设置。我们将尝试切换到托管。