全球ASAX – 获取服务器名称

任何人都可以告诉我是否有办法让我在Global.asax的Application_Start事件中获取我的站点的域名?

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


嗯 – 从下面的答案,这似乎是IIS7在这里有所作为。 这是新的,现在有devise准则,试图阻止你这样做:

IIS博客

你可以通过静态的HttpContext.Current成员来访问Context 。

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

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

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

所以你有两个select

  1. 将您的应用程序代码更改为不使用请求上下文(推荐)。
  2. 将应用程序移至经典模式(不推荐)。

http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart/

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

但是,您可以使用System.Environment.MachineNamefind机器名称。

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

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

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

 Hosting.HostingEnvironment.ApplicationHost.GetSiteName 

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

更新:似乎“GetSiteName”的方法不打算直接调用,它不适用于我在Visual Studio 2015年(或者也许是因为我所做的框架版本更改)。 我通过replace它来修复它:

 System.Web.Hosting.HostingEnvironment.SiteName 

你有没有访问请求对象? 如果是这样,我认为你可以使用Request.Url.Authority

它将返回你正在寻找的DNS主机名称。

G

你有没有尝试过: –

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

谢谢,

菲尔。