Программно получить URL-адрес сервера IIS - PullRequest
2 голосов
/ 13 января 2012

Короткая версия:

Как я могу получить URL сервера, на котором выполняется мой проект MVC3? Я НЕ хочу жестко кодировать адрес сервера.

Длинная версия:

У меня есть три сервера, с которыми я буду работать:

  1. Сервер разработки
  2. QA сервер для тестирования других
  3. Производственный сервер

Ни один из вышеперечисленных серверов не имеет одинаковый URL.

Мой веб-проект должен генерировать уведомления по электронной почте, которые содержат кликабельную ссылку.

Я знаю, что Request.Url.ToString () получит мне сервер, но если возможно, я бы не стал тратить время на обработку этой строки каждый раз, когда я генерирую электронное письмо.

Ответы [ 7 ]

4 голосов
/ 13 января 2012

Вы можете обработать Request.Url один раз и сохранить результат в статической переменной. Просто убедитесь, что вы обращаетесь к этой переменной потокобезопасным способом. Я использовал это в производстве уже довольно давно, и это работает как шарм.

2 голосов
/ 13 января 2012
HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.ApplicationPath;

Должен сделать трюк для вас

1 голос
/ 13 января 2012

Не уверен, что это то, что вам нужно, но мне недавно пришлось получить URL-адрес веб-сайта по умолчанию в IIS. Это оказалось настоящей болью, но мне удалось получить этот рабочий код ...

    using System.DirectoryServices;
    using System.Diagnostics;

    private string GetDefaultSite()
    {
        using (DirectoryEntry w3svc2 = new DirectoryEntry("IIS://Localhost/W3SVC"))
        {
            foreach (DirectoryEntry de in w3svc2.Children)
            {
                if (de.SchemaClassName == "IIsWebServer" &&
                    de.Properties["ServerComment"].Value.ToString() == "Default Web Site")
                {
                    string binding = de.Properties["ServerBindings"].Value.ToString();

                    string[] split = binding.Split(':');

                    if (split[2] == "") return "http://localhost/";
                    else return "http://" + split[2] + "/";
                }
            }
        }
        return "";
    }
1 голос
/ 13 января 2012

Request.URI это путь.Если вы действительно беспокоитесь о производительности, профилируйте ее.Я могу почти гарантировать, что результаты не будут плохими.Если это так, вы можете прочитать его из заголовков вручную через Request.ServerVariables ["HTTP_HOST"] Request.ServerVariables ["SERVER_NAME"] и т. Д.

0 голосов
/ 28 октября 2013

вы можете использовать Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);.Это вернет сервер, начиная с http .... до имени сервера и порта.

0 голосов
/ 13 января 2012

Один из них должен работать:

Response.Write Server.MachineName;
Response.Write Request.ServerVariables["LOCAL_ADDR"];
0 голосов
/ 13 января 2012

Посмотрите на Переменные сервера , вы можете найти там имя сервера.

SERVER_NAME может быть хорошим выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...