我通过命令行传递了参数

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相关问答推荐

JWT 和 Google 在 Razor 页面中进行身份验证和授权

如何从 Azure 上托管的应用服务获取登录用户名?

ReportViewer 控件 - 高度问题

Azure Service Fabric 是否与 Docker 做同样的事情?

System.Web.Helpers.Crypto - 盐在哪里?

使用 JavaScript 更改 ASP.NET 标签的可见性

如何从 asp:Repeater 循环遍历项目模板中的项目?

在 ASP.NET Core 1.0 上处理大文件上传

Windows 运行 ASP.NET 的 IIS 替代方案

ASP.NET 中的 <%# Bind("") %> 和 <%# Eval("") %> 有什么区别?

为应用程序池Classic .NET AppPool提供服务的进程与 Windows 进程激活服务发生了致命的通信错误

用于验证的数据注释,至少一个必填字段?

如何在 ASP.Net 的客户端 (JavaScript) 上判断 Page.Validate()?

MVC 4 - Razor - 将变量传递到 href url

如何在 ASP.NET 中通过 LAN 访问您的网站

如何使div按钮提交其所在的表单?

global.asax 中的 Application_Error 未捕获 WebAPI 中的错误

协调 ASP.NET 脚本包和源映射

使用 Web.Config 转换的高级任务

将字符串转换为时间