Как я получаю доменное имя хоста в ASP.NET, не используя HttpContext. Текущий. Запрос?

У меня есть приложение .NET ASP, работающее на IIS7. Я использую текущий URL, под которым работает сайт установить некоторые статические свойства на классе в моем приложении. Чтобы сделать это, я получаю доменное имя с помощью этого (insde статический конструктор класса):

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

И это хорошо работает на моей dev машине (Windows XP / Cassini). Однако, когда я развертываюсь к IIS7, я получаю исключение: "Запрос не доступен в этом контексте".

Я предполагаю, что это вызвано тем, что я использую этот код в статическом конструкторе объекта, который становится выполняемым в IIS, прежде чем любые запросы войдут; и Cassini не инициировал статического конструктора, пока запроса не происходит. Теперь, мне первоначально не нравилась идея вытянуть доменное имя от Запроса по этой самой причине, но это было единственное место, я нашел его =)

Так, кто-либо знает другого места, что я могу получить доменное имя хоста? Я предполагаю, что ASP, .NET должен знать о нем на некотором уровне, независимом от HttpRequests, я просто, не знает, как получить доступ к нему.

6
задан Badjer 1 February 2010 в 23:42
поделиться

3 ответа

[11298853-

Причина, по которой домен в запросе - это то, что просят. Например, это несколько сайтов Stockexchange из http://www.stackexchangesites.com/ :

Если вы их пинги, вы увидите все, что все они указывают на тот же IP-сервер IP / Web и обслуживаться тем же приложением (или несколькими приложениями в этом случае, Но пример держится, если бы это был один большой) ... но приложение не знает, какой из них до A заголовок хоста приходит с запросом, задающим сервер для этого сайта. Каждый запрос может быть в другой домене ... поэтому приложение этого не знает.

Если он, однако, не изменяется, вы можете хранить его в виде аппарата в web.config .

8
ответ дан 17 December 2019 в 02:28
поделиться

Используйте вместо этого:

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

-3
ответ дан 17 December 2019 в 02:28
поделиться

Используйте global.asax или напишите HttpModule и подпишитесь на события запуска запроса. Вы получите запрос в обработчик событий.

1
ответ дан 17 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: