configuration - 如何在静态网页中访问 Azure Web App 配置

标签 configuration azure-functions azure-web-app-service

我有一个简单的设置:

  • Azure Web 应用,运行静态 react 应用
  • Azure Functions App,访问数据库并从静态 Web 应用程序调用的 API 层

  • Web App 和 Functions App 都具有部署槽功能,您首先在单独的槽中进行部署,如果一切正常,您可以将槽中的工件与当前版本交换,而无需停机。我真的很想充分利用它。

    我想使用 Web App 配置来注入(inject) API 的根 uri,让它指向相应插槽中的 API。所以生产暂存静态站点应该指向生产暂存 API。

    但这是主要问题:我无法从我的 react 应用程序访问 Web 应用程序配置。我必须在构建时插入根 uri,这会禁用 Web 应用程序的交换功能(因为它仍将指向暂存)。

    访问配置对 Functions App 来说工作正常;我假设是因为它正在运行节点。

    最佳答案

    Web 应用程序配置可用作服务器上的环境变量。您将无法在客户端上运行的静态 react 应用程序中访问这些变量。

    您将需要某种 中间件 能够通过 API 读取和公开环境变量。

    您可以使用带有 React 项目模板的 ASP.NET Core 要创建两者,一个充当 API 的 ASP.NET Core 项目和一个充当 UI 的标准 CRA React 项目,但可以方便地将两者托管在可以作为单个单元构建和发布的单个应用程序项目中。 (Source)。

    然后你将不得不编写一个暴露配置的小 Controller 。这里有一个例子:

    public class MyOptions
    {
        public string ApiUri { get; set; }
    }
    
    [ApiController]
    [Route("[controller]")]
    public class ConfigurationController : ControllerBase
    {
        private readonly MyOptions _options;
    
        public ConfigurationController(IOptions<MyOptions> options)
        {
            _options = options.Value;
        }
    
        [HttpGet]
        public MyOptions GetConfigurations()
        {
            return _options;
        }
    }
    

    您还需要配置 中的选项。启动.cs :
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<MyOptions>(Configuration.GetSection(nameof(MyOptions)));
        services.AddControllers();
    }
    

    现在您可以在 中设置初始值。 appsettings.json :
    {
      "MyOptions": {
        "ApiUri" :  "https://myapp.domain.com/api" 
      }
    }
    

    您还可以使用 Azure Web 应用配置覆盖选项(中间件配置为也使用环境变量,并且环境变量覆盖 appsettings.json)

    现在您要做的最后一件事是使用以下命令检索静态 UI 中的设置:
    window.location.host + "/api/configuration"
    

    关于configuration - 如何在静态网页中访问 Azure Web App 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61423155/

    相关文章:

    java - IntelliJ IDEA 12 - Android 版本不兼容错误

    asp.net-core - 使用托管生成代理从 Visual Studio Team Services 发布 ASP.NET 5 RC1 项目时出错

    configuration - 如何使用 Spring Cloud 在一个 Spring Boot 应用程序中连接/配置两个 pubsub gcp 项目?

    c# - ConfigurationManager.GetSection(sectionName) 在执行单元测试时返回 null

    git - 在 Laravel 5 应用程序中,环境特定的值应该保存在哪里?

    azure - 将附加文件添加到 VSTS 发布到 azure web 应用程序

    c# - Entity Framework 查询性能慢

    c# - 天蓝色函数 : How to access the host key programmatically using C# code?

    javascript - 如何使用 azure 函数和 cosmos Node sdk 检查 cosmosDB 中的项目是否已过期?

    java - 使用 Java 进行编码的 Azure 功能应用程序