1

我创建了一个 .NET Core Web api 端点,我可以在其中检索一些我想在我的移动应用程序中显示的图像。我通过导航到该路线并通过邮递员在本地测试了端点,两者都工作正常(显示正确的响应)。但是,当我尝试从移动端访问端点时,它不起作用。我得到这个神秘的错误:

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 认证设置。我需要在移动端做类似的事情吗?

这是我尝试调用端点的方式。我正在使用改装:

    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();
    }

OnAppearing 在我的代码隐藏中我的一个观点:

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

        }

我在上面做错了什么?

我正在 Mac OSX 上的 Android 10 (API 29) 模拟器上对此进行测试,后端代码使用 Visual Studio for Mac 在本地运行(后端是 .NET Core 3.1 web api 项目)。

4

1 回答 1

4

如果您使用的是 IISExpress,请尝试更改您的调试配置。

http://localhost:[PORT]改为http://127.0.0.1:[PORT]

然后你应该可以在 android 中使用http://10.0.2.2:[PORT]访问它

与设置

对于红隼

应通过 Program.cs 中的 IHostBuilder 进行设置,如下所示:

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>();
                });
}
于 2020-02-17T03:53:50.227 回答