ASP.NET命令行参数

时间:2017-05-22 19:28:09

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

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

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

Environment.GetCommandLineArgs()

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

这些是:

iisexpress.exe文件的路径。

applicationhost.config的路径

A“/ site”arg。

“/ apppool”arg。

这表明实际上有一种传递参数的方法,但是没有人谈论它并且没有记录。我想在这里添加另一个自定义arg,我们自己的代码可以查找并响应它是否存在。

2 个答案:

答案 0 :(得分:0)

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

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

无法向ASP.NET网站提供自定义命令行参数。我建议您考虑使用Environment variables,注册表项或web.config项目。

答案 1 :(得分:0)

我想简单地扩展@ 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应用程序的设计的一部分。不要走这条路。