Установка url приложения из appsettings - PullRequest
0 голосов
/ 20 декабря 2018

Здравствуйте, мне нужно использовать appsettings (или другой jsonfile) до инициализации класса Startup, особенно в 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 голосов
/ 21 декабря 2018

Я знаю, что есть два отличных ответа @ Ígor Krug и @ Tseng (и я проголосовал за два ответа).Приведенное ниже объяснение просто для ответа на вопрос ОП в комментарии.(Я пытался подать комментарий, но это ужасно вставить столько слов в комментарии)


Я не понимаю: поэтому вы создаете конфигурацию в основном методе, но как выпривязать его к приложению, чтобы потом можно было ссылаться на него при запуске?

Как вы знаете, Startup не заботится о том, как создается Configuration.Если вы хотите поделиться конфигурацией с компоновщиком хоста и приложением (включая Startup), есть два способа сделать это.

  1. Как @ Tseng просто invoke .UseConfiguration(config). Метод .UseConfiguration указывает конфигурацию для компоновщика хоста , а также эта конфигурация будет повторно использоваться приложением .Что касается исходного вопроса, добавьте параметр urls:"https://your.host.name:port" в appsettings.json:

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

    и просто скопируйте ответ Ценга с небольшим изменением:

    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);
        })
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...