1

我正在将一个组合的 Azure 网站(带有控制器和 ApiControllers)迁移到一个拆分的 Web 应用程序和 API 应用程序。我们称之为 MyApp。

我创建了 MyAppDevApi、MyAppTestApi 和 MyAppProductionApi API 应用程序(在不同的应用程序服务中)来托管这三个环境,期望将代码从一个环境提升到另一个环境。

到目前为止,我只部署到 MyAppDevApi,因为我才刚刚开始。

当我Add/Azure API App Client对纯 UI 项目开始引用 API 应用程序并将其指向 MyAppDevApi 时,它使用 AutoRest 在我的代码中创建类。这些类现在都具有名称 MyAppDevApi,而不仅仅是 MyAppApi,这是我部署到每个环境的代码的实际名称空间。显然,我无法检查...我如何通过测试和生产来推广它?

Swagger JSON 中没有任何内容引用此名称,因此它必须在 AutoRest 端(我认为)。

有没有人想出策略或解决方法来处理 API 应用程序的这种多环境推广问题?

编辑

到目前为止,我想出的最好的方法是将 Swagger 从 API 应用程序下载到本地文件(同样,它只有原始代码的命名空间,而不是 API 应用程序的名称),然后将其导入 Web 应用程序。这将在 Web 应用程序中生成具有我期望的命名的类。

问题是我必须编辑生成的 MyAppApi.cs 文件的 _baseUri 属性以从 AppSetting 中提取,具有不同的 web.config.dev、.test、.prod,然后进行 web.config 转换。我的意思是,这会起作用,但是每次我更改 API 应用程序的界面时,我都会重新生成……然后我会记得再次更改 _baseUri……而且有人,有时会忘记执行此操作,然后部署到生产环境。它真的,真的很脆弱。

所以...有人有更好的主意吗?

4

2 回答 2

0

我不太清楚你为什么要创建三个不同的应用程序,每个环境一个?一个应用程序很好,并为每个环境使用 web.config 转换。这是我做所有应用程序的一般方式,并且工作正常。

可以在此处找到有关如何应用 web.config 转换的信息,这可能对您的情况有所帮助。

希望有帮助。

于 2015-10-15T01:04:42.220 回答
0

好吧,这就是我解决这个问题的方法:

  1. 从 API App 下载 Swagger 文件到本地硬盘。
  2. 将本地 Swagger 文件导入 Web App 以生成具有我的代码而不是环境命名的类。
  3. 使用 AppSettings 指定特定于环境的设置以指向 API 应用程序。这可以是 web.config 转换,也可以只在应用程序设置的 Web 应用上的 Azure 门户中指定它们。
  4. 使用接受 URL 以指向 API App 的构造函数实例化生成的 API App Client(这些是在类级别,因此是静态的):
    private readonly static Uri apiAppUrl = new Uri(CloudConfigurationManager.GetSetting("ApiAppUrl"));
    private readonly static MyAppApi myAppApi = new MyAppApi(apiAppUrl);

我仍然喜欢一个不需要下载 Swagger 文件的解决方案,但总而言之,如果这是唯一必要的解决方法,那也不是那么糟糕。

于 2015-10-19T20:24:45.127 回答