#c# #rest #xamarin #httprequest
#c# #остальное #xamarin #httprequest
Вопрос:
Я запускаю приложение xamarin на реальном устройстве и получаю Connection Refused
ошибку при выполнении http-запроса.
Примечание: http-запрос работает, когда я использую эмулятор
Я попробовал следующее в качестве базового URL-адреса: http://127.0.0.1:62597 / , http://localhost:62597/
Я также добавил требовать разрешения для Интернета из манифеста Android. решение-> свойства-> Вкладка манифеста Android. Однако я заметил одну вещь: при запуске приложения на устройстве оно не запрашивает никаких разрешений… Я новичок в этом, поэтому любая помощь очень ценится. Спасибо
и это трассировка стека:
at System.Net.Http.ConnectHelper.ConnectAsync (System.String host, System.Int32 port, System.Threading.CancellationToken cancellationToken) [0x00180] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs:84
at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
at System.Net.Http.HttpConnectionPool.CreateConnectionAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x000ea] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:371
at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync (System.Threading.Tasks.ValueTask`1[TResult] creationTask) [0x000a2] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:529
at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync (System.Net.Http.HttpRequestMessage request, System.Boolean doRequestAuth, System.Threading.CancellationToken cancellationToken) [0x0003f] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:284
at System.Net.Http.RedirectHandler.SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x00070] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RedirectHandler.cs:32
at System.Net.Http.HttpClient.FinishSendAsyncBuffered (System.Threading.Tasks.Task`1[TResult] sendTask, System.Net.Http.HttpRequestMessage request, System.Threading.CancellationTokenSource cts, System.Boolean disposeCts) [0x0017e] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpClient.cs:506
at Artvertise.Services.RestHelperExtensions.MakeArtPost[TResponseModel] (Artvertise.Services.ArtClient client, System.String route, System.Object data, Artvertise.Services.ContentType contentType) [0x000c5] in C:UsersagundsourcereposArtvertiseArtvertiseServicesRestHelperExtensions.cs:82
Комментарии:
1.
localhost
это псевдоним127.0.0.1
, обозначающий текущее устройство. Устройство запрашивает устройство, но ваш API не запускается (я думаю) на устройстве. Где запущен API? На вашем компьютере в Visual Studio debug?2. Используйте IP-адрес компьютера вместо 127.0.0.1 (loopback) или localhost. На некоторых компьютерах localhost установлен в loopback, а на других — в IP-адрес компьютера. Таким образом, переключение с обратной связи на локальный хост приводит к тем же плохим результатам.
3. Формы webapp и xamarin находятся под одним и тем же решением, и я щелкаю правой кнопкой мыши по основному решению -> Свойства и выберите запустить несколько проектов, а затем выберите веб-приложение и Android. При использовании эмулятора я просто меняю базовый URL на 10.0.2.2: 62597
4. @jdweng но веб-приложение работает на локальном хосте, на что вы ссылаетесь, говоря «адрес компьютера»?
5. IP-адрес компьютера. Библиотека net выдает ошибки, когда клиент использует адрес обратной связи 127.0.0.1 с методом Connect.
Ответ №1:
http-запрос работает, когда я использую эмулятор
Это работает, потому что эмулятор запущен на рабочем столе и использует ту же сетевую среду, что и dessktop. При использовании localhost, а не 127.0.0.1, он автоматически найдет веб-сервер.
Однако при запуске на физическом устройстве их сетевая среда отличается. Вам необходимо указать IP-адрес рабочего стола. Поэтому, если использовать IP-адрес для эмулятора, также будет работать. Например: https://192.168.1.15:62597/
Шаги решения:
Во-первых, вам нужно убедиться, что ваш рабочий стол и телефон подключены к одному и тому же WiFi (или любой другой локальной сети),
Затем используйте IP-адрес вашего рабочего стола, назначенный маршрутизатором (не localhost, а не 127.0.0.1).
Как узнать IP-адрес вашего рабочего стола:
- введите в командной строке
ipconfig
(Windows) - там будет куча IP-адресов
- попробуйте все из них (кроме упомянутых localhost и 127.0.0.1)
Например, следующий снимок экрана — это мой IP-адрес моего рабочего стола:
Комментарии:
1. Это не давало мне покоя всю ночь, и я думал о том же, что и то, что вы опубликовали. Я думаю, что ваше решение будет работать. Я постараюсь и дам вам знать! Спасибо