我通过命令行传递了参数

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;
}

其中一个参数是日志(log)输出目录.如何将该值输入到我的Startup类中,以便在收到请求时写入该目录?

我希望避免使用静态类.提供价值的服务是正确的方式吗?如果是这样,我如何将服务注入中间件?

推荐答案

你应该可以使用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相关问答推荐

IIS重写模块排除机器人但允许GoogleBot

Web 部署工具 2.1 和 Web 部署 3.5 有什么区别?从 VS 2010 部署需要哪一个?

某些黑客能否从用户那里窃取 Web 浏览器 cookie 并在网站上使用该名称登录?

业务线应用程序:F# 会让我的生活变得轻松吗?

在 appSettings 中存储字符串数组?

WebAPI 请求流支持

如何在 IISExpress 上使用带有 localhost 的子域?

无法读取配置部分system.servicemodel,因为它缺少部分声明

IIS 6/ASP.NET Windows 身份验证 list ?

异步编程与线程有什么不同?

多行文本框多个换行符

UseSqlServer 方法缺少 MVC 6

LINQ to Entities 无法识别 MVC 4 中的System.String ToString()方法

MVC5 身份验证中的......与主域之间的信任关系失败

如何在 C# 应用程序中调用 VBScript 文件?

使用 ASP.NET Web API 对 PUT 和 DELETE 的 CORS 支持

发布网站项目时临时路径太长

覆盖静态方法

使用 ConfigurationManager.RefreshSection 重新加载配置而不重新启动应用程序

如何在不遍历每个循环的情况下从字典对象中获取所有键(仅键)