Проблема с подключением к REST Api по HTTPS из форм Xamarin - Android телефон - PullRequest
0 голосов
/ 16 апреля 2020

Я создал приложение форм Xamarin и net core REST api. Мне удалось подключить телефон Android к USB, развернуть на нем приложение форм Xamarin, запустить API REST на IIS EXPRESS из Visual Studio и подключить его к приложению Xamarin на телефоне по HTTP с помощью класса HttpClient.

Что мне не удалось сделать, это сделать то же самое и запустить HTIPS API REST. Вот что я попробовал и до какой точки я дошел:

  1. Я настроил переадресацию портов в chrome и мне удалось получить доступ к моему локальному API с помощью веб-браузера на моем телефоне. Итак, я доказал, что нажатие https://localhost: someport / somecontroller / someaction работает.
  2. Я также создал объект HttpClient (client = new HttpClient ()) и сумел выполнить успешный запрос get https://www.google.com из моего приложения Xamarin. Итак, я доказал, что HTTPS для Google работает.
  3. Следующим шагом является получение моего 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. Любая идея или подсказка будут полезны.

1 Ответ

0 голосов
/ 16 апреля 2020

Ваша проблема в том, что устройство Android не знает локальное устройство. Windows машина знает это, следовательно, вы можете получить к нему доступ в UWP.

Один из способов - подключить все устройства к одной сети и использовать IP-адрес для доступа к localhost. Дальнейшее объяснение доступно здесь .

Но я предлагаю вам использовать ngrok , это намного проще. Туннелируйте ваш localhost через их домен и используйте выделенный uri вместо localhost. Я использую это для той же цели, прекрасно работает.

Их документы супер дружелюбны. Если у вас есть какие-либо проблемы, прокомментируйте здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...