【问题标题】:Xamarin app running in local emulator to talk to Web API hosted in local IIS?在本地模拟器中运行的 Xamarin 应用程序与本地 IIS 中托管的 Web API 通信?
【发布时间】:2019-01-07 05:24:17
【问题描述】:

我的开发机器位于本地 LAN 中,具有本地静态 IP 地址。并且模拟器基本上是另一个设备,所以应用程序应该使用本地静态 IP 地址而不是 localhost 或 127.0.0.1。所以我有这样硬编码的基本 URI:

                var baseUri = new Uri("http://192.168.0.8:9030/webapi/");

如果其他开发人员需要测试代码,那就不好了。我正在考虑将基本 uri 放在配置文件中,并在部署模拟器之前,使用开发机器的本地 IP 地址更新配置文件。

Xamarin 中是否有内置配置文件或构建机制用于此目的?或者您将如何使用本地 IIS 和本地模拟器使用 Web API 进行测试?

我正在使用 Visual Studio 2017 Professional。

【问题讨论】:

    标签: android xamarin xamarin.forms visual-studio-2017


    【解决方案1】:
    1. Android 模拟器有一个它使用的虚拟/专用私有子网,10.0.2.2 的 IP 是模拟器将 host 系统映射到 (所以模拟器上的10.0.2.2就是宿主机的localhost/127.0.0.1)。

    2. 您当然可以将文本文件 (json/xml/etc..) 添加到项目中,并在运行时从中加载/读取 IP 值。

      一个。程序集嵌入文件:How to read embedded resource text file

      b.您可以使用本机平台应用程序只读包来存储配置文件,并在运行时从本机应用程序或 .NetStd 库中读取它,而不是使用程序集嵌入文件。 (注意:我更喜欢这种方法而不是程序集嵌入。)

    Xamarin.Essentials'OpenAppPackageFileAsync 提供了一种简单的方法来访问应用程序中的只读捆绑文件(AndroidAssets、BundleResource 等)。

    using (var stream = await FileSystem.OpenAppPackageFileAsync("sushiConfig.json"))
    {
        using (var reader = new StreamReader(stream))
        {
            var fileContents = await reader.ReadToEndAsync();
        }
    }
    

    【讨论】:

    • 是否有内置方法可以使用 Web API IP 地址更新配置文件?我知道如何通过命令行更改 json 文件,但是,我更愿意使用开箱即用的东西。
    • @ZZZ 在 Xamarin.iOS|Android 应用程序中,没有内置的“config”文件可以镜像 web.config 文件(或其他一些 .Net 标准约定)。在“本机”应用程序支持方面,iOS 中有 plists,Android 中有应用程序清单,将 iOS plist 文件添加为 BundleResource 将是最接近的,但 Android 清单是预定义的模式,所以它是不是一个真正的选择。
    • @ZZZ 所以以您选择的格式添加基于文本的文件是可行的方法,您也可以定义#if/#else 块并定义const 字符串变量来定义什么IP使用的地址取决于项目的编译方式。
    猜你喜欢
    • 2019-01-06
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多