Global ASAX - 获取服务器名称

时间:2009-11-24 14:34:59

标签: asp.net .net asp.net-mvc iis-7

有人可以告诉我是否有办法在global.asax的Application_Start事件中获取我的网站的域名?

通常我只是从Context.Request.ServerVariables [“SERVER_NAME”]中获取它,但这不可用。理想情况下,我还希望从启动应用程序的请求中获取URL。


嗯 - 从下面的答案来看,似乎在IIS7上有所作为。这是新的,现在有设计指南试图阻止你这样做:

IIS Blog

6 个答案:

答案 0 :(得分:22)

您可以通过静态Context成员访问HttpContext.Current

HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
HttpContext.Current.Request.Url;

编辑,基于您的一些评论,我做了一些额外的研究

  

此错误是由于IIS7集成管道中的设计更改导致Application_Start事件中的请求上下文不可用。使用经典模式(在以前版本的IIS上运行时的唯一模式)时,请求上下文过去可用,即使Application_Start事件始终是应用程序生命周期中的全局和请求不可知事件。尽管如此,因为ASP.NET应用程序总是由对应用程序的第一个请求启动,所以过去可以通过静态HttpContext.Current字段访问请求上下文。

所以你有两个选择

  1. 将您的应用程序代码更改为不使用请求上下文(推荐)。
  2. 将应用程序移至经典模式(不推荐)。
  3. http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart/

答案 1 :(得分:17)

您的网络应用程序可以在多个不同的域下运行。由于Application_Start事件中没有当前请求,因此您无法知道将在哪个域中调用该应用程序。

然而,您可以使用System.Environment.MachineName找出机器名称。

答案 2 :(得分:5)

我猜你在IIS 7上?因为HttpContext在IIS 6.0上可用。

您可以考虑稍后填写这些信息吗?第一次调用Application_BeginRequest例如?

答案 3 :(得分:3)

在VB.NET中,在Global.asax中,我使用以下内容:

Hosting.HostingEnvironment.ApplicationHost.GetSiteName

它对应于IIS中的应用程序名称。

更新:似乎方法“GetSiteName”不打算直接调用,它在Visual Studio 2015中不再适用于我(或者可能是因为框架版本更改了我制作)。我通过以下方式修复它:

System.Web.Hosting.HostingEnvironment.SiteName

答案 4 :(得分:0)

您是否可以访问Request对象?如果是这样,我认为你可以使用 Request.Url.Authority

它将返回您正在寻找的dns主机名。

答案 5 :(得分:-3)

你有没有尝试过: -

System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"]

谢谢,

菲尔。