Я создал приложение форм Xamarin и net core REST api. Мне удалось подключить телефон Android к USB, развернуть на нем приложение форм Xamarin, запустить API REST на IIS EXPRESS из Visual Studio и подключить его к приложению Xamarin на телефоне по HTTP с помощью класса HttpClient.
Что мне не удалось сделать, это сделать то же самое и запустить HTIPS API REST. Вот что я попробовал и до какой точки я дошел:
- Я настроил переадресацию портов в chrome и мне удалось получить доступ к моему локальному API с помощью веб-браузера на моем телефоне. Итак, я доказал, что нажатие https://localhost: someport / somecontroller / someaction работает.
- Я также создал объект HttpClient (client = new HttpClient ()) и сумел выполнить успешный запрос get https://www.google.com из моего приложения Xamarin. Итак, я доказал, что HTTPS для Google работает.
- Следующим шагом является получение моего API из моего приложения. Я установил самоподписанный сертификат на свой p c и создал экземпляр класса HttpClient в приложении следующим образом:
var client = new HttpClient(new HttpClientHandler { ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; } });
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
С помощью этого кода я всегда получаю исключение «Отказано в соединении» на httpClient.SendAsyn c ( запрос). Что интересно, этот код работает при подключении к услуге от UWP, а не с Android телефона (я не пробовал Ios). Еще одна интересная ситуация: если я создаю экземпляр HttpClient любым другим способом, то с помощью конструктора без параметров (например, нового HttpClient ()) (new HttpClient (new HttpClientHandler ())), тогда даже мой ранее успешный случай с HTTP не будет работать.
Согласно всем написанным, сводка заключается в том, что все случаи работают, за исключением использования HTTPS от Android до локального P C для достижения REST API. Любая идея или подсказка будут полезны.