У меня есть приложение .NET ASP, работающее на IIS7. Я использую текущий URL, под которым работает сайт установить некоторые статические свойства на классе в моем приложении. Чтобы сделать это, я получаю доменное имя с помощью этого (insde статический конструктор класса):
var host = HttpContext.Current.Request.Url.Host;
И это хорошо работает на моей dev машине (Windows XP / Cassini). Однако, когда я развертываюсь к IIS7, я получаю исключение: "Запрос не доступен в этом контексте".
Я предполагаю, что это вызвано тем, что я использую этот код в статическом конструкторе объекта, который становится выполняемым в IIS, прежде чем любые запросы войдут; и Cassini не инициировал статического конструктора, пока запроса не происходит. Теперь, мне первоначально не нравилась идея вытянуть доменное имя от Запроса по этой самой причине, но это было единственное место, я нашел его =)
Так, кто-либо знает другого места, что я могу получить доменное имя хоста? Я предполагаю, что ASP, .NET должен знать о нем на некотором уровне, независимом от HttpRequests, я просто, не знает, как получить доступ к нему.
Причина, по которой домен в запросе - это то, что просят. Например, это несколько сайтов Stockexchange из http://www.stackexchangesites.com/ :
Если вы их пинги, вы увидите все, что все они указывают на тот же IP-сервер IP / Web и обслуживаться тем же приложением (или несколькими приложениями в этом случае, Но пример держится, если бы это был один большой) ... но приложение не знает, какой из них до A заголовок хоста приходит с запросом, задающим сервер для этого сайта. Каждый запрос может быть в другой домене ... поэтому приложение этого не знает.
Если он, однако, не изменяется, вы можете хранить его в виде аппарата в web.config
.
Используйте вместо этого:
HttpRuntime.AppDomainAppVirtualPath
Или, если вам нужен физический путь:
HttpRuntime.AppDomainAppPath
Для дальнейшего чтения:
Используйте global.asax или напишите HttpModule и подпишитесь на события запуска запроса. Вы получите запрос в обработчик событий.