无法从移动应用程序连接到 api 端点
Can't connect to api endpoint from mobile app
我创建了一个 .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();
}
关于我的观点之一出现在我的代码隐藏中:
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 项目)。
如果您使用的是 IISExpress,请尝试更改您的调试配置。
改为http://localhost:[PORT] to 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>();
});
}
我创建了一个 .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();
}
关于我的观点之一出现在我的代码隐藏中:
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 项目)。
如果您使用的是 IISExpress,请尝试更改您的调试配置。
改为http://localhost:[PORT] to 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>();
});
}