如何在不使用HttpContext.Current.Request的情况下在ASP .NET中获取主机域名?

时间:2010-02-01 23:42:58

标签: asp.net url dns

我在IIS7上运行了一个ASP .Net应用程序。我正在使用网站运行的当前网址在我的应用程序中的类上设置一些静态属性。为此,我使用这个获取域名(提供类的静态构造函数):

var host = HttpContext.Current.Request.Url.Host;

它在我的开发机器上运行正常(Windows XP / Cassini)。但是,当我部署到IIS7时,我得到一个例外:“请求在此上下文中不可用”。

我猜这是因为我在对象的静态构造函数中使用此代码,在任何请求进入之前,它在IIS中执行;在请求发生之前,Cassini不会触发静态构造函数。现在,我最初并不喜欢从请求中提取域名的想法,但这是我发现它的唯一地方=)

那么,有没有人知道我可以获得主机域名的另一个地方?我假设ASP .Net必须在某种程度上了解它,独立于HttpRequests,我只是不知道如何访问它。

3 个答案:

答案 0 :(得分:8)

域名在请求中的原因是......这就是要求的内容。例如,这些是来自http://www.stackexchangesites.com/的几个stackexchange站点:

如果你ping它们,你会发现它们都指向同一个IP / Web服务器并由同一个应用程序提供服务(或者在这种情况下是多个应用程序,但是如果它是一个大的那个例子则保持不变)。但是,在host header请求服务器提供该站点的请求之前,应用程序不知道哪一个。每个请求可能是一个不同的域...所以应用程序不知道它。

如果它没有改变,您可以将其存储为web.config中的appSetting。

答案 1 :(得分:1)

使用global.asax或编写HttpModule并订阅启动请求事件。您将请求传递到事件处理程序。

答案 2 :(得分:-3)

请改用:

HttpRuntime.AppDomainAppVirtualPath

或者如果你想要物理路径:

HttpRuntime.AppDomainAppPath

进一步阅读:

http://weblogs.asp.net/reganschroder/archive/2008/07/25/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-application-start.aspx