Не найден доверенный якорь для пути сертификации [Xamarin.Forms] - PullRequest
0 голосов
/ 11 марта 2020

Я сталкиваюсь со следующим исключением при попытке POST к https API с использованием Open VPN

Примечание: Когда Я пытаюсь получить доступ к API с помощью swagger на планшете, к которому подключен Open VPN, API подключается и работает нормально, просто мобильное приложение не может его использовать. (в приложении Xamarin мы получаем исключение.

Код:

var uri = prepareLoginUri("/Login/Login");
var body = new { username, password };
var json = JsonConvert.SerializeObject(body);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await _client.PostAsync(uri, content);

Исключение:

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

Нашли решение для этого исключения, но не устранили проблему:

https://forums.xamarin.com/discussion/91782/trust-anchor-for-certification-path-not-found

Согласно предложению в По этой ссылке я добавил следующий код в MainActivity.cs

HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };
_client = new HttpClient(clientHandler);

Это решило исключение, но теперь я получаю ответ от API: 404 Не найдено .

StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.HttpConnection+HttpConnectionResponseContent

но в чванстве API работает абсолютно нормально.

1 Ответ

0 голосов
/ 12 марта 2020

Попробуйте поместить sla sh (/) в конце BaseAddress, и вы не должны размещать sla sh (/) в начале вашего относительного URI. как:

client.BaseAddress = new Uri("http://192.168.1.100:33435/ManageSystem/");
var response = await client.GetAsync("Login/Login");
...