有人可以告诉我是否有办法在global.asax的Application_Start事件中获取我的网站的域名?
通常我只是从Context.Request.ServerVariables [“SERVER_NAME”]中获取它,但这不可用。理想情况下,我还希望从启动应用程序的请求中获取URL。
嗯 - 从下面的答案来看,似乎在IIS7上有所作为。这是新的,现在有设计指南试图阻止你这样做:
答案 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 :(得分: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)
答案 5 :(得分:-3)
你有没有尝试过: -
System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"]
谢谢,
菲尔。