通过appsettings设置应用程序的网址

时间:2018-12-20 13:51:08

标签: c# asp.net-core

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

如何实现呢?

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;

        }

    }

1 个答案:

答案 0 :(得分:1)

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


  

我不明白:因此您在main方法中创建了一个Configuration,但是如何将其绑定到应用程序,以便以后可以在Startup中引用它?

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

  1. 就像@ Tseng一样,只需调用.UseConfiguration(config) .UseConfiguration方法将为主机构建器指定一个配置,并且该配置将被应用程序重用。至于您的原始问题,请在您的urls:"https://your.host.name:port"中添加一个appsettings.json设置:

    {
        "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=>{ /*...*/ }) 这部分配置不会与主机制作者共享

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