我很难尝试使用服务器提供的P12证书执行POST请求。我之前从未处理过HTTPS,而且我也在圈子里(我不确定我是否使用了正确的术语)。我知道这一定是非常基础的,但这是我第一次需要这样的代码。
我甚至试图复制其他人为完全相同的目的所做的事情,但由于某种原因它不起作用(也许它与它在Android中如何工作有关,我不确定)。
这就是我现在所拥有的:
var client = new RestClient("https://www.aidap.naimes.faa.gov/aidap/XmlNotamServlet");
client.ClientCertificates = new X509CertificateCollection() { clientCertificate };
string postData = "uid=myUsername&password=myPassword&active=Y";
var request = new RestRequest(Method.POST);
request.AddParameter("application/x-www-form-urlencoded", postData, ParameterType.RequestBody);
var response = client.Execute(request);
当调用GetRequestStream()时,我得到以下内容(我复制第一位,因为它很长):
{System.Net.WebException:错误:SecureChannelFailure(发生一个或多个错误。)---> System.AggregateException:发生一个或多个错误。 ---> System.Security.Authentication.AuthenticationException:对SSPI的调用失败,请参阅内部异常。 ---> Mono.Btls.MonoBtlsException:Syscall 在Mono.Btls.MonoBtlsContext.ProcessHandshake()[0x00038] in< 9624f2cab6ac4ffc9c31e9469d40591a&gt ;:0 在Mono.Net.Security.MobileAuthenticatedStream.ProcessHandshake
证书和密码似乎工作正常,因为我可以在调试模式下检查并验证所有细节都已加载到" clientCertificate"。
修改
所以我尝试了Ketan的建议,但我不太确定如何在Android项目中添加跟踪。我所做的是创建一个小型控制台应用程序,但我没有必要添加一个跟踪,因为它可以立即完美运行。
我还尝试了一种与RestSharp不同的方法,它在控制台应用程序中再次完美地工作,但在Xamarin中却没有:
{{1}}
因此必须有一些东西阻止SSL在Android中运行。