如何确定应用程序是否是Web应用程序

And*_*son 26 .net

在核心程序集中,它在Windows服务和Web应用程序中运行,我需要按用户会话存储信息.该服务将具有单个用户会话,并且Web应用程序使用HttpContext.Current.

我想配置在核心程序集中使用哪种方法 - 约定优于配置.我只想这样做一次,我相信当从Application_Start运行时,HttpContext.Current将为null.

如何可靠地确定应用程序是否是Web应用程序?

小智 42

if(HttpRuntime.AppDomainAppId != null)
{
  //is web app
}
else
{
  //is windows app
}
Run Code Online (Sandbox Code Playgroud)

  • HttpRuntime 对于框架应用程序来说是一个很好的解决方案,但此时 System.Web 并不存在于核心/标准中。 (4认同)

Rub*_*ben 15

我会去的

HostingEnvironment.IsHosted
Run Code Online (Sandbox Code Playgroud)

请注意,即使您不打算使用此类程序集中的方法,也会产生轻微的开销.(System.Web程序将加载和几类可以初始化和JIT编译.)此外,还有上的System.Web hard依赖了,所以在有限的框架设定(目前仅IIRC与客户端配置文件),你不能用它.

另一种方式(尽管不是很整洁并且有文件证明),是检查

Path.GetFileName(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile)
Run Code Online (Sandbox Code Playgroud)

如果返回web.config(或其外壳变体),它可能是一个Web应用程序.(虽然你可以设置一个名为配置文件的任何应用程序域web.config,这不是一个可能的情况).这避免了承担的System.Web的依赖.

但是,HostingEnvironment.IsHosted旨在指示appdomain是否配置为在ASP.NET下运行.