如何确定当前应用程序是否为ASP.NET Web应用程序

M4N*_*M4N 14 .net asp.net

从托管类库中,我想知道当前正在执行的应用程序是否是ASP.NET Web应用程序(Web表单或MVC).

我已经看到了不同的方法,例如通过检查以下之一:

  • System.Web.Hosting.HostingEnvironment.IsHosted == true
  • System.Web.HttpContext.Current != null
  • System.Web.HttpRuntime.AppDomainAppId != null
  • System.Web.HttpRuntime.Cache != null
  • 检查web.config文件(注意:我认为这不可靠)

问题是我应该使用哪种方法?它们中的一些是无效的(即,即使在Windows应用程序中运行它们可能会返回true)还是它们都是相同的?


更新/澄清(对不起,如果我的问题不够明确):

  • 我有一个托管类库(.net代码),由.net应用程序运行(显然)
  • 这个"主机应用程序"可以是ASP.NET应用程序(例如Web表单或MVC)或Windows应用程序(例如控制台或win表单)
  • 我的问题是:有没有办法从我的类库中(在运行时)可靠地确定它是否作为ASP.NET应用程序的一部分运行?

注意:我知道我可以实现不同的解决方案(例如,请参阅下面的评论或Tomas Lycken的答案),但这不是这个问题的重点.类库已经存在,我想尽可能少地改变代码!

Tom*_*han 3

我必须在这里质疑你的目标:为什么图书馆应该知道它正在运行什么样的应用程序?

对我来说,听起来您需要将库的相关部分分成两部分 - 一部分用于 Web 应用程序,另一部分用于 winforms 应用程序。(可能还有第三部分,包含两种类型的应用程序都可以使用的所有内容......)

  • 您当然可以质疑我的目标:-)但这并不能回答我的问题!请参阅更新的问题。 (2认同)