任何人都可以告诉我是否有办法让我在Global.asax的Application_Start事件中获取我的站点的域名?全球ASAX - 获取服务器名称
通常我只是从Context.Request.ServerVariables [“SERVER_NAME”]得到它,但这是不可用的。理想情况下,我也喜欢从启动应用程序的请求中获取URL。
嗯 - 从下面的答案,似乎IIS7在这里有所作为。这是新的,现在有设计准则,以尝试和做它阻止你:
任何人都可以告诉我是否有办法让我在Global.asax的Application_Start事件中获取我的站点的域名?全球ASAX - 获取服务器名称
通常我只是从Context.Request.ServerVariables [“SERVER_NAME”]得到它,但这是不可用的。理想情况下,我也喜欢从启动应用程序的请求中获取URL。
嗯 - 从下面的答案,似乎IIS7在这里有所作为。这是新的,现在有设计准则,以尝试和做它阻止你:
您可以通过静态HttpContext.Current成员访问Context。
HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
HttpContext.Current.Request.Url;
编辑,根据你的一些意见,我做了一些额外的研究
这个错误是由于在IIS7集成管道,使得在Application_Start事件无法请求上下文中的设计更改。使用经典模式(在先前版本的IIS上运行时的唯一模式)时,尽管Application_Start事件一直被认为是应用程序生命周期中的全局和请求不可知事件,但请求上下文过去常常可用。尽管如此,由于ASP.NET应用程序始终是通过对应用程序的第一个请求启动的,因此通过静态HttpContext.Current字段可以访问请求上下文。
所以,你有两个选择
您的网络应用程序可以在多个不同的域下运行。由于Application_Start
事件中没有当前的请求,因此无法知道应用程序将在哪个域中调用。
然而,您可以使用System.Environment.MachineName
找出机器名称。
在VB.NET,在Global.asax中,我使用以下命令:
Hosting.HostingEnvironment.ApplicationHost.GetSiteName
它对应于IIS应用程序的名称。
更新:看来,方法“GetSiteName”不打算直接调用,它不适用于我在Visual Studio 2015中(或者也许是因为我所做的框架版本更改)。 - HttpContext.Current是一个静态成员
System.Web.Hosting.HostingEnvironment.SiteName
我不认为这是在的Application_Start – Luk
@Luk一个的HttpContext:我通过替换它固定它。无论你在什么范围内都无所谓。它就在那里。如果您遇到问题,请完全限定它System.Web.HttpContext.Current – Bob
如果我这样做,我会得到一个运行时错误,指出该请求在此上下文中不可用。资质没有任何区别。 – Paddy