在代码中确定正在使用的Web服务器

时间:2011-10-27 15:48:26

标签: asp.net visual-studio

是否可以实用地判断ASP.NET Web应用程序是在Visual Studio或IIS中的Cassini Web服务器中运行?

提问的背景和原因:

在我们的很多应用中,我们通过检查计算机名称或检查客户端IP是否为localhost来绕过登录页面中的正常登录设置。 (127.0.0.1或::: 1)这样我们就可以在我们的开发PC上进行调试时测试并使应用程序的行为不同。

机器名称方法没问题,但是当我们得到一台新的Dev PC时,我们需要更改代码。我意识到这不是经常发生,但感觉很草率。此外,由于有几个开发人员正在处理它,我们必须在“if”语句中列出我们所有的机器。

对于“localhost”方法,我不喜欢它。它似乎增加了另一个攻击面。我担心有人会进入其中一个网络服务器并在本地运行并查看内容。

所以我想知道是否有一种方法可以从代码中检测到网站是从带有Cassini Web服务器的Visual Studio运行的。

2 个答案:

答案 0 :(得分:2)

在IIS下运行时,SERVER_SOFTWARE集合的ServerVariables属性会报告类似Microsoft-IIS/7.5的内容。

不幸的是,在Cassini下运行时,这似乎是空白的。

我不知道这是否对您有所帮助,因为如果您担心安全问题,这似乎与所期望的行为相反。

来自评论:

检查System.Diagnostics.Process.GetCurrentProcess()。ProcessName对于Cassini,它是“WebDev.WebServer40”,对于IIS,它是“w3wp”

string processName= System.Diagnostics.Process.GetCurrentProcess().ProcessName;
if (processName == "WebDev.WebServer40")
{
   // testing
   // Insert code that you want to happen if this is running in Visual Studio
}

如果这在IIS中运行,则pName变量将为“w3wp”。在.NET 4.0应用程序的Visual Studio中,它是“WebDev.WebServer40”。 (我没有检查,但我认为它将是WebDev.WebServer20 for ASP.NET 2.0)

答案 1 :(得分:0)

你不能使用构建符号吗?设置构建符号然后执行#IF PROD然后运行身份验证。因此,当您处于调试模式时,它将完全跳过身份验证。希望有所帮助!