在Application_Start上访问当前域名

时间:2011-10-04 12:04:24

标签: c# .net global-asax

通常要访问当前域名,例如托管站点的地方,我会执行类似

的操作
string rURL = HttpContext.Current.Request.Url.ToString().ToLower();

但仅HttpContext Application_Start Application_BeginRequest无法使用{{1}}。

有什么想法吗?

4 个答案:

答案 0 :(得分:8)

单个IIS应用程序可以绑定到许多不同的URL。 Application_Start在收到任何请求之前触发,因此找到该网站绑定的域名的唯一方法是查询IIS。

即便如此,您可能无法得到答案 - 考虑应用程序绑定到通配符/默认主机名的情况。

更好的方法可能是Application_AuthenticateRequest。这会在Application_BeginRequest之前触发,并且会为您提供完整的HttpContext.Current.Request对象。

答案 1 :(得分:7)

尝试Dns.GetHostName()

您可以在Gloabl.asax.cs中使用它,无论是否在Application_Start()内。

var hostName = Dns.GetHostName();

在Asp.net 4.5 MVC中测试。

答案 2 :(得分:3)

IIS应用程序在应用程序启动时不知道它从哪个域访问(请参阅绑定)。

答案 3 :(得分:2)

实现这一目标的一种方法是做一点作弊并附带警告,那就是使用System.Web.Hosting.HostingEnvironment.SiteName

所以这看起来像:

string rURL = System.Web.Hosting.HostingEnvironment.SiteName;

现在对于那些警告:

  • 这是IIS中站点的名称。
  • 这意味着您的网站名称可以是非URI(例如我的真棒网站)。
  • 如果您有多个域共享同一个站点,则每个域都是相同的。

出于我的目的 - 在IIS中有多个站点指向同一物理文件夹的服务器上设置日志记录 - 上述解决方案可能是最简单和最简单的。我不是说它必然是“正确的”答案,但它应该被视为一种替代方案。