2010-02-01 17 views
6

我有一个运行在IIS7上的ASP .Net应用程序。我正在使用该网站正在运行的当前网址,以便在我的应用程序的类中设置一些静态属性。要做到这一点,我得到使用这个域名(insde类的静态构造函数):如何在不使用HttpContext.Current.Request的情况下获取ASP .NET中的主机域名?

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

和它的作品我的开发机(窗XP /卡西尼)的罚款。但是,当我部署到IIS7时,出现异常:“请求在此上下文中不可用”。

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

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

回答

8

该域名在请求中的原因是......这就是要求的。例如,这些是一些stackexchange网站从http://www.stackexchangesites.com/

如果您ping它们,你会看到他们都指向了同一个IP /网络服务器,并由相同的应用程序(或在这种情况下的多个应用程序,但举例说,如果它是一个大),但应用程序不知道哪一个,直到一个host header进来请求服务器r为该网站。每个请求可能是到不同的域...所以应用程序不知道它。

如果不改变,你可以将它作为应用程序设置存储在web.config中。

+0

嗯,对的,那么我真的应该做的不是在静态构造函数中初始化这些东西。事实上,如果我想要安全起见,我甚至不应该让自己的价值观保持静态 - 我应该再次查看它们,以防万一我收到来自多个域的请求(在我的例子中,我赢了'吨,但很好意识到这一点)。 感谢您的帮助 - 不幸的是,现在我应该重构这个遗留应用程序的一个更大的块比我想=) – Badjer 2010-02-02 01:01:56

1

使用global.asax或写一个HttpModule并订阅启动请求事件。您将请求传入您的事件处理程序。

相关问题