我在IIS7上运行了一个ASP .Net应用程序.我正在使用网站运行的当前网址在我的应用程序中的类上设置一些静态属性.为此,我使用此获取域名(insde the class的静态构造函数):
var host = HttpContext.Current.Request.Url.Host;
Run Code Online (Sandbox Code Playgroud)
它在我的开发机器上工作正常(Windows XP/Cassini).但是,当我部署到IIS7时,我得到一个例外:"请求在此上下文中不可用".
我猜这是因为我在一个对象的静态构造函数中使用这个代码,它在任何请求进入之前在IIS中执行; 在请求发生之前,Cassini不会触发静态构造函数.现在,我最初并不喜欢从请求中提取域名的想法,但这是我发现它的唯一地方=)
那么,有没有人知道我可以获得主机域名的另一个地方?我假设ASP .Net必须在某种程度上了解它,独立于HttpRequests,我只是不知道如何访问它.
域名在请求中的原因是......这就是要求的内容.例如,这些是来自http://www.stackexchangesites.com/的一些stackexchange站点:
如果你ping它们,你会发现它们都指向同一个IP/Web服务器并由同一个应用程序提供服务(或者在这种情况下是多个应用程序,但是如果它是一个大的那个例子则存在)...但是应用程序不知道哪一个,直到主机头请求服务器请求该站点的请求.每个请求可能是一个不同的域...所以应用程序不知道它.
但是,如果它没有改变,你可以将它存储为appSetting web.config.