【问题标题】:Setting url of application from appsettings从 appsettings 设置应用程序的 url
【发布时间】:2019-05-21 01:19:31
【问题描述】:

您好,我需要在初始化 Startup 类之前使用 appsettings(或其他 jsonfile),特别是在 Program.Main 中调用的 CreateWebHostBuilder 中。我想为应用程序设置UseUrls(url)。 在Startup 类中使用IConfiguration 时,我想以某种方式重用相同的资源。

如何做到这一点?

public class Program {
        public static void Main(string[] args) {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) {

            WebHostBuilder builder = new WebHostBuilder();
            builder.UseStartup<Startup>();
            //load the Port and Host from appsettings
            var url =$"http://{appsettings.host}:{appsettings.port}/";
            Debug.WriteLine(url);
            builder.UseKestrel().UseUrls(url);
            return builder;

        }

    }

【问题讨论】:

标签: c# asp.net-core


【解决方案1】:

我知道@Ígor Krug 和@Tseng 有两个很好的答案(我对这两个答案投了赞成票)。下面的解释只是为了回答评论中OP的问题。 (我试图发表评论,但在评论中粘贴这么多字很糟糕)


我不明白:所以你在 main 方法中创建了一个配置,但是你如何将它绑定到应用程序,以便以后可以在启动时引用它?

如您所知,Startup 并不关心Configuration 的构造方式。如果您想与主机构建器和应用程序(包括Startup)共享配置,有两种方法可以做到这一点。

  1. 正如@Tseng 所做的那样,只需调用.UseConfiguration(config).UseConfiguration 方法将为主机生成器指定配置,并且此配置将被应用程序重用。至于您的原始问题,请在您的appsettings.json 中添加urls:"https://your.host.name:port" 设置:

    {
        "urls": "http://localhost:8809",
         ...
    }
    

    然后简单地复制 Tseng's answer 并稍作改动:

    WebHostBuilder builder = new WebHostBuilder();
    builder.UseStartup<Startup>();
    
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: false)
        // ...
        .Build();
    
    return builder
         // the `config` will be reused by application (including Startup)
        .UseConfiguration(config)      
        .UseKestrel();
    
  2. 或者,如果您想为您的应用程序添加单独的配置(包括Startup),您可以调用.ConfigureAppConfiguration(c=&gt;{ /*...*/ })这部分配置不会与主机生成器共享

    return builder
        // .UseConfiguration(config) 
        .UseUrls(config["urls"])
        .UseKestrel()
        .ConfigureAppConfiguration(c =>{
            c.AddConfiguration(config);
        })
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多