2017-08-03 151 views
2

我使用Xamarin.Forms,我的優先級是UWP。我試圖通過System.Net.Http.HttpClient使POST請求和我的代碼看起來像這樣Xamarin.Forms HTTPS和自簽名證書問題

public async Task<LoginResponse> Login(User user) 
{ 
    HttpClient client = await GetClient(); 

    var response = await client.PostAsync(Url, new StringContent(JsonConvert.SerializeObject(user), Encoding.UTF8, "application/json")); 
    var mobileResult = await response.Content.ReadAsStringAsync(); 
    var result = JsonConvert.DeserializeObject<LoginResponse>(mobileResult); 

    return result; 
} 

當我讓我得到這個錯誤

System.Net.Http.HttpRequestException請求:發生錯誤同時發送 的請求。 ---> System.Runtime.InteropServices.COMException:找不到與此錯誤代碼關聯的 文本。

的證書頒發機構是無效或不正確

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 系統.Net.Http.HttpHandlerToFilter.d__4.MoveNext() ---從先前的位置堆棧跟蹤其中的例外是在 系統拋出---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)結束。 Runtime.CompilerServices .TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 System.Net.Http.HttpClientHandler.d__86.MoveNext()--- 內部異常堆棧跟蹤的末尾在 System.Net.Http.HttpClientHandler.d__86.MoveNext () ---從先前的位置在那裏引發異常---堆棧跟蹤的結尾處 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在 System.Net.Http.HttpClient.d__58.MoveNext() ---從以前的位置拋出異常的堆棧跟蹤結束---在 System.Runtime.Compile rServices.TaskAwaiter.ThrowForNonSuccess(任務 任務)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務 任務)在System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() at SampleApp.Services.LoginService.<Login>d__2.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() 在SampleApp.Views.LoginPage.d__1。 MoveNext()

我認爲導致問題的自簽名SSL。我知道我可以使用Windows.Web HttpClient忽略SSL錯誤,但由於一些問題,現在是不可能的。 我該如何解決這個問題?提前致謝。

+0

你介意顯示你的網址嗎? –

+0

它類似於https://xx.xxx.xxx.xx/v1/login。不能顯示完整的URL抱歉。從https://開始。 – Tartar

+0

我想你可以使用'DependencyService'來通過'Windows.Web.Http'獨立地在uwp客戶端項目中實現登錄功能。 –

回答

0

一種使用自簽名證書的解決方法是初始化你的HttpClient以忽略SSL證書錯誤之前插入下面的代碼:

ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; 

確保包括System.Net。

希望這會有所幫助。

+1

之前嘗試過,但它不適合我。 https://stackoverflow.com/questions/28629989/ignore-ssl-certificate-errors-in-xamarin-forms-pcl – Tartar