ASP.NET 命令行参数



我很好奇将参数传递给MVC应用程序(Web应用程序,休息服务等)的选项。然而,从我能找到的来看,似乎没有对此的支持......

如果我修改应用程序的Application_Start方法(在 Globals.asax.cs 中)并添加如下语句:

Environment.GetCommandLineArgs()

然后在Visual Studio调试器下运行它,我可以看到正在传递四参数。

这些是:

iisexpress.exe 文件的路径。

应用程序主机.config 的路径

一个"/site"参数。

一个"/apppool"参数。

这表明实际上有一种方法可以通过论点,但没有人谈论它,也没有记录在案。我想在这里添加另一个自定义参数,如果存在,我们自己的代码可以查找并响应它。

ASP.NET 网站不是Windows应用程序。 例如,它没有.exe。 相反,ASP.NET 网站包含一系列符合特定接口的类,这些类作为插件拉入 IIS 进程,特别是从 HttpApplication 继承的 Global.asax。 当 HTTP 请求传入时,IIS 实例化 HttpApplication 并从那里开始;这不像从命令行运行程序。

如果您尝试通过各种 API 了解有关应用程序进程(例如命令行参数)的信息,则很可能您不会获得有关您的网站的信息,而是有关整个 IIS 服务进程的信息。

无法向 ASP.NET 网站提供自定义命令行参数。我建议您考虑改用环境变量、注册表项或 web.config 项。

我想简单地扩展@Steve上面的评论。

典型的 ASP.NET Web 应用始终由进程托管。这使Environment.GetCommandLineArgs有可能在您发现时返回一些值。但是,通过这样的传递信息会很棘手,因为在许多情况下,您没有有意义的方法来传递所需的值。

Visual Studio 中的 IIS Express

在 VS 中调试项目时,它通常在 IIS Express 上运行,VS 不提供配置要传递的参数的位置。 (ASP.NET 核心项目可能不同。

Windows Server 上的 IIS

当应用最终部署到成品服务器时,它将在 IIS 上运行。IIS 工作进程 (w3wp.exe) 完全由 Windows 进程激活服务管理,因此,您同样无法设置要传递的参数。

自托管

某些项目类型(ASP.NET Web API/SignalR/WCF)允许您在控制台进程中执行自承载。在这种情况下,您可以处理命令行参数。

但是,总的来说,命令行参数不是Microsoft将信息传递到 ASP.NET 应用程序的设计的一部分。 不要在这条路上走得太远。

最新更新