C# HttpWebRequest到NSUrlConnection/NSUrlSession或HttpClient(使用ModerHttpClient库)
我们有Xamarin跨平台编写的代码,适用于Android和客户端隧道软件: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");
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实现,它已设置为默认设置。我们将尝试切换到托管。