C# Getting System.Net.WebException:错误:运行AppXXX.Droid(一个Xamarin.Forms可移植项目)时发生SendFailure(写入标题时出错)
我已经创建了一个Xamarin.Forms便携式项目,目标是Android、iOS、UWP、Windows和WindowsPhone平台。我正在尝试使用使用System.Net.Http命名空间的HttpClient发出Http请求。应用程序正在尝试请求一些安全端点。以下是我代码的一部分:C# Getting System.Net.WebException:错误:运行AppXXX.Droid(一个Xamarin.Forms可移植项目)时发生SendFailure(写入标题时出错),c#,ssl,xamarin.android,xamarin.forms,portability,C#,Ssl,Xamarin.android,Xamarin.forms,Portability,我已经创建了一个Xamarin.Forms便携式项目,目标是Android、iOS、UWP、Windows和WindowsPhone平台。我正在尝试使用使用System.Net.Http命名空间的HttpClient发出Http请求。应用程序正在尝试请求一些安全端点。以下是我代码的一部分: HttpClientHandler handler = new HttpClientHandler(); HttpClient httpClient = new
HttpClientHandler handler = new HttpClientHandler();
HttpClient httpClient = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, reqUrl);
string charset = "UTF-8";
string contentType = "application/json";
bool isAuthOrReg = (reqUrl.Contains("/user/xxx") ||
reqUrl.Contains("/user/xxx") ||
reqUrl.Contains("/user/xxx));
if (isAuthOrReg)
{
request.Headers.Add("KEY", getKey());
request.Headers.Add("SECRET", getSecret());
}
request.Headers.Add("Accept-Charset", charset);
request.Content = new StringContent(postData, Encoding.UTF8, contentType);
request.Content.Headers.ContentLength = postData.Length;
HttpResponseMessage response = await httpClient.SendAsync(request);
string serverResponse = await response.Content.ReadAsStringAsync();
当我以Windows8.1应用程序运行该项目时,它运行良好。但是,当我把它作为Android应用程序运行时,我得到了
未处理的异常:
System.Net.WebException: Error: SendFailure (Error writing headers)"
06-16 13:59:27.012 D/Mono ( 1702): DllImport attempting to load: '/system/lib/liblog.so'.
06-16 13:59:27.012 D/Mono ( 1702): DllImport loaded library '/system/lib/liblog.so'.
06-16 13:59:27.012 D/Mono ( 1702): DllImport searching in: '/system/lib/liblog.so' ('/system/lib/liblog.so').
06-16 13:59:27.012 D/Mono ( 1702): Searching for '__android_log_print'.
06-16 13:59:27.012 D/Mono ( 1702): Probing '__android_log_print'.
06-16 13:59:27.012 D/Mono ( 1702): Found as '__android_log_print'.
06-16 13:59:27.040 I/MonoDroid( 1702): UNHANDLED EXCEPTION:
06-16 13:59:27.064 I/MonoDroid( 1702): System.Net.WebException: Error: SendFailure (Error writing headers) ---> System.Net.WebException: Error writing headers ---> System.IO.IOException: The authentication or decryption has failed. ---> Mono.Security.Protocol.Tls.TlsException: The authentication or decryption has failed.
06-16 13:59:27.065 I/MonoDroid( 1702): at Mono.Security.Protocol.Tls.RecordProtocol.EndReceiveRecord (IAsyncResult asyncResult) [0x0003a] in /Users/builder/data/lanes/3236/ee215fc9/source/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/RecordProtocol.cs:430
06-16 13:59:27.065 I/MonoDroid( 1702): at Mono.Security.Protocol.Tls.SslClientStream.SafeEndReceiveRecord (IAsyncResult ar, Boolean ignoreEmpty) [0x00000] in /Users/builder/data/lanes/3236/ee215fc9/source/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs:285
06-16 13:59:27.065 I/MonoDroid( 1702): at Mono.Security.Protocol.Tls.SslClientStream.NegotiateAsyncWorker (IAsyncResult result) [0x00071] in /Users/builder/data/lanes/3236/ee215fc9/source/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/SslClientStream.cs:447
06-16 13:59:27.065 I/MonoDroid( 1702): --- End of inner exception stack trace ---
在我个人看来,这是因为Android无法忽略ssl。所以,我试图通过引用
但是,我得到了同样的错误。有没有办法解决这个问题?
谢谢。此错误的一个可能原因是服务器不允许TLS 1.0密码。例如,见。另请参阅最新Xamarin.Android发行说明中的“Native HttpClientHandler”:此错误的一个可能原因是服务器不允许TLS 1.0密码。例如,见。另请参见最新Xamarin.Android发行说明中的“原生HttpClientHandler”:
ServicePointManager
.ServerCertificateValidationCallback +=
(sender, cert, chain, sslPolicyErrors) => true;