Какой самый лучший метод в ASP.NET чтобы получить текущий домен?
Мне интересно, какой лучший способ получить текущий домен находится в ASP.NET?
например:
http://www.domainname.com/subdir/ должен уступить http://www.domainname.com http://www.sub.domainname.com/subdir/ должен уступить http://sub.domainname.com
в качестве руководства, я должен быть в состоянии добавить url, как "/Folder/Content/filename.html " (скажем, как генерируется Url.RouteUrl () in ASP.NET MVC) прямо на URL-адрес, и он должен работать.
10 ответов:
тот же ответ, что и у MattMitchell, но с некоторыми изменениями. Вместо этого проверяется порт по умолчанию.
изменить: обновленный синтаксис и использование
Request.Url.Authority
как предложил$"{Request.Url.Scheme}{System.Uri.SchemeDelimiter}{Request.Url.Authority}"
по состоянию на этой ссылке хорошей отправной точкой является:
Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host
однако, если домен http://www.domainname.com:500 это не удастся.
что-то вроде следующего соблазн решить это:
порт 80 и 443 будут зависеть от конфигурации.int defaultPort = Request.IsSecureConnection ? 443 : 80; Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host + (Request.Url.Port != defaultPort ? ":" + Request.Url.Port : "");
таким образом, вы должны использовать
IsDefaultPort
а в Принято Отвечать выше от Карлоса Муньоса.
внимание! для всех, кто использует ток.Запрос.Url-адрес.Хозяин. Поймите, что вы работаете на основе текущего запроса и что текущий запрос не всегда будет с вашим сервером и иногда может быть с другими серверами.
Так что если вы используете это в чем-то вроде, Application_BeginRequest() в глобальном.asax, то 99,9% времени это будет нормально, но 0,1% вы можете получить что-то другое, чем имя хоста вашего собственного сервера.
хороший примером этого является то, что я обнаружил не так давно. Мой сервер, как правило, хит http://proxyjudge1.proxyfire.net/fastenv Время от времени. Application_BeginRequest () с удовольствием обрабатывает этот запрос, так что если вы вызываете запрос.Url-адрес.Хозяин, когда он делает этот запрос, вы вернетесь proxyjudge1.proxyfire.net. некоторые из вас могут думать "нет duh", но стоит отметить, потому что это было очень трудно заметить, так как это произошло только в 0,1% случаев : P
эта ошибка заставила меня чтобы вставить мой доменный хост в виде строки в конфигурационные файлы.
почему бы не использовать
Request.Url.Authority
он возвращает весь домен и порт.
вам все равно нужно вычислить http или https
простой и короче путь (он поддерживает схему, домен и порт):
использовать
Request.GetFullDomain()
// Add this class to your project public static class HttpRequestExtensions{ public static string GetFullDomain(this HttpRequestBase request) { var uri= request?.UrlReferrer; if (uri== null) return string.Empty; return uri.Scheme + Uri.SchemeDelimiter + uri.Authority; } } // Now Use it like this: Request.GetFullDomain(); // Example output: https://www.example.com:5031 // Example output: http://www.example.com:5031 // Example output: https://www.example.com
иначе:
string domain; Uri url = HttpContext.Current.Request.Url; domain= url.AbsoluteUri.Replace(url.PathAndQuery, string.Empty);
Как насчет:
NameValueCollection vars = HttpContext.Current.Request.ServerVariables; string protocol = vars["SERVER_PORT_SECURE"] == "1" ? "https://" : "http://"; string domain = vars["SERVER_NAME"]; string port = vars["SERVER_PORT"];