Не удается подключиться к конечной точке API из мобильного приложения - PullRequest
0 голосов
/ 17 февраля 2020

Я создал конечную точку веб-API. NET Core, где я могу получить некоторые изображения, которые я хочу отобразить в своем мобильном приложении. Я проверил конечную точку локально, перейдя по этому маршруту и ​​через почтальона, и оба работают нормально (показывая правильный ответ). Однако, когда я пытаюсь попасть в конечную точку с мобильной стороны, это не работает. Я получаю эту криптовую c ошибку:

System.Net.Http.HttpRequestException: Network subsystem is down

Вот еще информация об исключении:

System.Net.Http.HttpRequestException: Network subsystem is down ---> System.Net.Sockets.SocketException: Network subsystem is down
  at System.Net.Http.ConnectHelper.ConnectAsync (System.String host, System.Int32 port, System.Threading.CancellationToken cancellationToken) [0x000c8] in /Users/builder/jenkins/workspace/archive-mono/2019-10/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs:65

Я не уверен, что я делаю неправильно на мобильной стороне. Я знаю, чтобы почтальон показывал это, мне пришлось отключить настройку SSL-сертификации. Нужно ли делать что-то подобное на мобильной стороне?

Вот как я пытаюсь позвонить на конечную точку. Я использую refit:

    public static class FetchMediaService
    {
        public static INevarroApi apiService;
        static string baseUrl = "https://localhost:5001";

        public static async Task<List<Uri>> CallImagesEndpoint()
        {
            apiService = RestService.For<INevarroApi>(baseUrl);
            var images = await apiService.GetImages();
            return images;
        }

    }

Где:

    public interface INevarroApi
    {
        [Get("/images")]
        Task<List<Uri>> GetImages();
    }

On Появляется в моем коде для одного из моих представлений:

        protected override async void OnAppearing()
        {
            DualScreenLayoutInfo.PropertyChanged += OnFormsWindowPropertyChanged;
            DualScreenInfo.Current.PropertyChanged += OnFormsWindowPropertyChanged;
            var images = await FetchMediaService.CallImagesEndpoint(); //Where the exception is thrown 

        }

Что я делаю неправильно над?

Я тестирую это на эмуляторе Android 10 (API 29) на Ma c OSX, и внутренний код выполняется локально с использованием Visual Studio для Ma c (бэкэнд является. NET Core 3.1 проект веб-API).

1 Ответ

1 голос
/ 17 февраля 2020

Если вы используете IIS Express, попробуйте изменить конфигурацию отладки.

Измените на http://localhost: [ПОРТ] на http://127.0.0.1: [PORT]

Тогда вы сможете получить к нему доступ в android с помощью http://10.0.2.2: [PORT]

Vs Settings

Для Kestrel

Настройки должны быть выполнены через IHostBuilder в Program.cs следующим образом :

public static IHostBuilder CreateHostBuilder(string[] args)
{
    return Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    // This should do it
                    webBuilder.UseUrls("http://127.0.0.1:5000");
                    webBuilder.UseStartup<Startup>();
                });
}
...