2013-06-07 2 views
4

Мне нужно узнать базовый URI приложения веб-API ASP.NET, размещенный в IIS 7.5+, сразу после запуска приложения, но до того, как любой клиентский запрос, возможно, достиг этого. Сценарий, в котором я нуждаюсь, следующий: периодическая проверка выполняется таймером, который выполняется независимо от пользовательских запросов и который запускается вместе с приложением (тот же процесс); если эта проверка проходит определенные условия, некоторые зарегистрированные пользователи получат электронное письмо с гиперссылкой на мое веб-приложение. Теперь я не хочу жестко указывать эту ссылку в любом месте, а скорее получать ее динамически из самого веб-приложения. Было бы просто понять это из контекста клиентского запроса, а затем кэшировать его в памяти, но, как вы можете себе представить, таймер может исчезнуть до того, как какой-либо запрос достигнет сервера.Получение URI веб-приложения во время запуска

Как я мог правильно определить базовый URI приложения? Я думал, что наиболее подходящим местом будет файл Global.asax.cs во время запуска веб-приложения, но я не мог найти ничего полезного.

ответ

3

Учитывая полный URL-адрес, такой как «http://mydomain.com/MyApplication/Controller/Action», вы можете получить некоторую информацию из объекта System.Web.Hosting.HostingEnvironment.ApplicationHost. Вы можете получить следующее:

  • ApplicationVirtualPath -> "/ MyApplication"
  • SiteName => "Default Web Site"

Однако, вы не сможете получить имя домена до того, как возникает фактический запрос. Это связано с тем, что веб-сайт IIS может принимать запросы для разных доменов, некоторые из которых известны только через DNS и никогда не настраиваются нигде.

Например, ваш сайт может отвечать как mydomain.com, так и www.mydomain.com. Какой из них правильный, который вы хотите добавить в свою ссылку?

Вы можете настроить свой веб-сайт IIS только для приема соединений, запрашивающих конкретный хост, но которые не могут быть получены из приложения ASP.NET.

+0

Большое спасибо за разъяснение! Я боялся, что это может быть так. Похоже, что в моем сценарии мне пришлось бы вернуться к использованию жестко заданного базового URL-адреса в web.config, который должен быть изменен в соответствии с местом размещения приложения. –

Смежные вопросы