【问题标题】:How do I access command line parameters in an ASP.NET Core MVC app?如何访问 ASP.NET Core MVC 应用程序中的命令行参数?
【发布时间】:2017-06-27 16:46:07
【问题描述】:

我的目标是稍后在其中一个控制器中使用命令行中的参数(即用户名 + 令牌)。

  • This blog 解释了很多有用的设置,但没有解释如何实际使用 --environment 以外的自定义参数。
  • 我找到了将命令行参数传递到Startup class 的方法,但没有找到如何将其传递到控制器中的方法。
  • 在查看docs 时,我无法正确地将参数传递给控制器​​类(示例文件还合并了 Program 和 Startup 类,因此我不确定如何在我自己的代码中处理它)。

最终我需要在应用程序开始时配置一些值,并且稍后需要通过控制器方法访问该值。任何实现这一目标的替代方案也非常感谢。

【问题讨论】:

  • 这是有道理的,但我想允许其他人使用 donet myapp.dll 从命令行部署 Web 应用程序,而无需进入并修改文件。这是一个好的方法吗? (也不确定是否相关,但我不是在 IIS Express 中运行,而是在自定义 docker 容器中运行)
  • 您的托管情况如何?自托管? IIS?欧文?
  • @Amy 自托管在 docker 容器中。它不是 Visual Studio 自动生成的,我已经编写了自己的 Dockerfile 等。理想情况下,有人会键入 docker run -e "USERNAME=un" image,容器将使用传入的用户名运行这个应用程序。

标签: c# asp.net-mvc asp.net-core


【解决方案1】:

ASP.NET Core 附带内置的DI container,应该用于通过构造函数参数解析依赖项。

我找到了将命令行参数传递到 Startup class 的方法,但没有找到如何将其传递到控制器中的方法。

这个例子已经包含了你需要的一切。见:

.ConfigureServices(services => services
                .AddSingleton(new ConsoleArgs(args))

这一行将ConsoleArgs 实例注册为单例到DI 容器。 然后它可以用作任何类中的依赖项。就像链接示例中的 Startup 类一样:

// args will be resolved  using DI container
public Startup(IHostingEnvironment env, ConsoleArgs args)
{      
  ...

所以如果你的控制器类也这样做:

public class YourController : Controller
{
    public YourController(ConsoleArgs args)
    {
        //use args here or store it in private variable
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-23
    • 2021-06-28
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多