【问题标题】:UseWebRoot and UseUrls from IConfigurationIConfiguration 中的 UseWebRoot 和 UseUrls
【发布时间】:2021-07-06 02:31:10
【问题描述】:

在一个始终侦听 http://localhost 的简单静态文件 ASP.NET Core 3.1 Web 服务器中,我想使用 IConfiguration 和自定义配置部分配置端口和 webroot。不幸的是,似乎没有办法在ConfigureWebHostDefaults 中获取IConfiguration 实例。

我如何才能在我也可以拨打UseUrlsUseWebRoot 的地方访问常规IConfiguration

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(
                webBuilder =>
                {
                    // Where do I get configuration from in the following two lines?
                    webBuilder.UseWebRoot(configuration.GetValue<string>("MySection:webroot"));
                    webBuilder.UseUrls($"http://localhost:{configuration.GetValue<int>("MySection:port")}");
                        
                    webBuilder.UseStartup<Startup>();
                });
}

public class Startup
{
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseDefaultFiles();
        app.UseStaticFiles();
    }
}

【问题讨论】:

    标签: asp.net-core asp.net-core-staticfile


    【解决方案1】:

    here 所述,唯一应该做的就是在您的 main 方法中构建配置。查看使用 appsettings.json 声明我的根文件夹路径的代码。

    public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        var configuration = new ConfigurationBuilder()
                            .SetBasePath(Directory.GetCurrentDirectory())
                            .AddEnvironmentVariables()
                            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                            .AddCommandLine(args)
                            .Build();
    
                        webBuilder.UseStartup<Startup>();
                        webBuilder.UseIISIntegration();
                        webBuilder.UseKestrel();
                        webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
                        webBuilder.UseWebRoot(configuration["UnifiWebRoot:Path"]);
                        webBuilder.UseUrls("https://localhost:5000");
                    });
    

    【讨论】:

    • 那么我怎样才能在一个我也可以调用UseUrlsUseWebRoot的地方访问IConfiguration
    • 你不必(或者你不应该在 Program.cs 中使用 DI)。我将更新一个代码,该代码解决了我通过 appsettings.json 声明根文件夹路径的问题。
    • 这个解决方案有点问题,因为根据ConfigureAppConfiguration 的设置方式,配置可能来自许多来源(例如,命令行参数、appsettings.development.json、环境变量、命令行参数)。我怎样才能使用IConfiguration那个实例?
    猜你喜欢
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多