繁体   English   中英

如何读取Service Fabric Azure App Configuration ASP.NET Core Stateless Web API?

[英]How to read the Azure App Configuration in Service Fabric ASP.NET Core Stateless Web API?

我需要帮助阅读 Service Fabric ASP.NET Core Stateless Web API 中的 App Configuration。在 Normal ASP.NET Core Web API 中,我们可以使用 Host CreateDefaultBuilder 读取配置并在 Startup 中使用它。 如果我尝试在 Service Fabric Web API 中注入,它不起作用。 Program.cs 仅包含以下内容。

private static void Main(string[] args)
            {
                try
                {
                    // The ServiceManifest.XML file defines one or more service type names.
                    // Registering a service maps a service type name to a .NET type.
                    // When Service Fabric creates an instance of this service type,
                    // an instance of the class is created in this host process.
    
                    ServiceRuntime.RegisterServiceAsync("EmailAPIType",
                        context => new EmailAPI(context)).GetAwaiter().GetResult();
    
                    ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(EmailAPI).Name);
    
    
                    // Prevents this host process from terminating so services keeps running. 
                    Thread.Sleep(Timeout.Infinite);
                }
                catch (Exception e)
                {
                    ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
                    throw;
                }
            }

并且 startup.cs 包含

    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.HttpsPolicy;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using Microsoft.Extensions.Logging;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace EmailAPI
    {
        public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            public IConfiguration Configuration { get; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddControllers();
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseHttpsRedirection();
    
                app.UseRouting();
    
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllers();
                });
            }
        }
    }

我试图在 program.cs 中注入 Host CreateDefaultBuilder

Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                    webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
                        {
                            var settings = config.Build();




                            config.AddAzureAppConfiguration(options =>
                            {
                                options.Connect(ConnectionString)
                                    .Select(ConfigValues).TrimKeyPrefix(qualtricsAppConfigPrefix + ":")
                                    .UseFeatureFlags();
                            });
                        })
                        .UseStartup<Startup>());

我的想法已经用完了。 在 Azure Function App 中,我们可以在 Startup 中完成,不确定我们如何在 Service Fabric 中处理 ASP.NET Core Web API。请提供任何示例。

我已经上传了在 One Drive 中创建的示例项目。 这是它的链接。

https://1drv.ms/u/s!Au2rKbF-hqWY61pykRlWRTI4DB8t?e=vz0c8z

终于想通了。 对于任何对这里感兴趣的人来说都是如此。 如果您有更好的方法,请告诉我

    public class Startup
    {
        private static string prefix = "";

        public Startup(IConfiguration configuration)
        {
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder
                .AddEnvironmentVariables()
                .AddJsonFile("appsettings.json", false, false)
                .AddEnvironmentVariables();


            var builder = configurationBuilder.Build();

            configurationBuilder.AddAzureAppConfiguration(o => AddApplicationKeysAppConfiguration(o, builder));
            builder = configurationBuilder.Build();

            configuration = builder;

            Configuration = configuration;
        }

        private static void AddApplicationKeysAppConfiguration(AzureAppConfigurationOptions options, IConfigurationRoot configuration)
        {
            var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
            environment = string.IsNullOrWhiteSpace(environment) ? Environment.GetEnvironmentVariable("Environment") : environment;


            string connectionString = "";

            options.Connect(connectionString)
                .Select($"{prefix}*", environment).TrimKeyPrefix(prefix + ":")
                .UseFeatureFlags(flagOptions =>
                {
                    flagOptions.Label = environment;
                });
        }



        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM