asp.net - 将命令行参数传递给 ASP.NET Core 中的 Startup 类

标签 asp.net .net asp.net-core owin katana

我有通过命令行传入的参数

private static int Main(string[] args)
{
    const string PORT = "12345"    ;

    var listeningUrl = $"http://localhost:{PORT}";

    var builder = new WebHostBuilder()
        .UseStartup<Startup>()
        .UseKestrel()
        .UseUrls(listeningUrl);

    var host = builder.Build();
    WriteLine($"Running on {PORT}");
    host.Run();

    return 0;
}

这些参数之一是日志输出目录。如何将此值放入我的 Startup 类中,以便在收到请求时可以写入此目录?

我想避免使用静态类。提供值(value)的服务是正确的方式吗?如果是这样,我如何将服务注入(inject)到我的中间件中?

最佳答案

您应该能够使用AddCommandLine() 扩展。首先安装 Nuget 包 Microsoft.Extensions.Configuration.CommandLine 并确保您具有正确的导入:

using Microsoft.Extensions.Configuration;

现在更新您的 Main 方法以包含新配置:

var config = new ConfigurationBuilder()
    .AddJsonFile("hosting.json", optional: true) //this is not needed, but could be useful
    .AddCommandLine(args)
    .Build();

var builder = new WebHostBuilder()
    .UseConfiguration(config)  //<-- Add this
    .UseStartup<Startup>()
    .UseKestrel()
    .UseUrls(listeningUrl);

现在您将命令行选项视为配置:

dotnet run /MySetting:SomeValue=123

并读取代码:

var someValue = Configuration.GetValue<int>("MySetting:SomeValue");

关于asp.net - 将命令行参数传递给 ASP.NET Core 中的 Startup 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45219949/

相关文章:

ASP.net vNext 和 Entity Framework 6

ASP.NET MVC6 : Setting webroot programmatically

c# - 为什么检查 List<T>.Count <= 0?

c# - 我可以在 MVC 站点下的虚拟目录中拥有传统的 ASP.NET Web 应用程序吗?

c# - 暴露的端口 0 未映射。测试容器 C#

c# - .NET Core 基于角色的身份 Cookie 动态过期

javascript - 按顺序将项目添加到列表中

c# - 检查 IQueryable 结果集的最佳方法是什么?

javascript - 如何在asp.net服务器端通过一个指定名称获取所有复选框值?

c# - 事件句柄和可见