




System.Web.UI.Page.Request.Url
Это даст полный URL-адрес страницы
Попробуйте это: Request.ServerVariables ["SERVER_PORT_SECURE"] + Request.ServerVariables ["SERVER_NAME"] + Request.ServerVariables ["SERVER_PORT"] + Request.ApplicationPath;
this.Request.Url.Host
Вы можете использовать что-то вроде этого.
System.Web.HttpContext.Current.Server.ResolveUrl("~/")
Он сопоставляется с корнем приложения. теперь, если вы находитесь внутри виртуального каталога, вам нужно будет проделать немного больше работы.
Редактировать
Старая публикация содержала неправильный вызов метода!
это дает имя физического пути, а не совсем то, что он искал. хорошо, ну ... совсем нет.
Сделать это можно так:
string.Format("{0}://{1}:{2}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port)
И вы получите общий синтаксис URI <protocol>: // <host>: <port>
Мне это нравится, но что делать, если вам не нужен порт, если порт 80 .. ?? - String.Format ((Request.Url.Port! = 80)? "{0}: // {1}: {2}": "{0}: // {1}", Request.Url.Scheme , Request.Url.Host, Request.Url.Port) .... или это сломается, потому что в некоторых случаях нет {2}
Это не сработает, если ваше приложение развернуто в виртуальном каталоге.
Мне действительно нравится, как CMS лучше всего справилась с этим вопросом, используя переменные String.Format и Page.Request. Я просто хотел бы немного подправить его. Я только что протестировал его на одной из своих страниц, поэтому скопирую код сюда:
String baseURL = string.Format(
(Request.Url.Port != 80) ? "{0}://{1}:{2}" : "{0}://{1}",
Request.Url.Scheme,
Request.Url.Host,
Request.Url.Port)
Этот метод обрабатывает http / https, номера портов и строки запроса.
'Returns current page URL
Function fullurl() As String
Dim strProtocol, strHost, strPort, strurl, strQueryString As String
strProtocol = Request.ServerVariables("HTTPS")
strPort = Request.ServerVariables("SERVER_PORT")
strHost = Request.ServerVariables("SERVER_NAME")
strurl = Request.ServerVariables("url")
strQueryString = Request.ServerVariables("QUERY_STRING")
If strProtocol = "off" Then
strProtocol = "http://"
Else
strProtocol = "https://"
End If
If strPort <> "80" Then
strPort = ":" & strPort
Else
strPort = ""
End If
If strQueryString.Length > 0 Then
strQueryString = "?" & strQueryString
End If
Return strProtocol & strHost & strPort & strurl & strQueryString
End Function
Мне пришлось иметь дело с чем-то похожим, мне нужен был способ программно установить тег, чтобы он указывал на корень моего веб-сайта.
Принятое решение не работало для меня из-за локального хоста и виртуальных каталогов.
Итак, я придумал следующее решение, оно работает на локальном хосте с виртуальными каталогами или без них и, конечно же, на веб-сайтах IIS.
string.Format("{0}://{1}:{2}{3}", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, ResolveUrl("~")
Объединив лучшее из того, что я видел по этому вопросу, этот заботится о:
приложение, размещенное в подпапке корня
string url = String.Format(
Request.Url.IsDefaultPort ? "{0}://{1}{3}" : "{0}://{1}:{2}{3}",
Request.Url.Scheme, Request.Url.Host,
Request.Url.Port, ResolveUrl("~/"));
Мы можем использовать Uri и его конструктор baseUri:
new Uri(this.Request.Url, "/") для корня сайтаnew Uri(this.Request.Url, this.Request.ResolveUrl("~/")) для корня сайтаЯ использую это свойство на странице для обработки виртуальных каталогов и портов по умолчанию:
string FullApplicationPath {
get {
StringBuilder sb = new StringBuilder();
sb.AppendFormat("{0}://{1}", Request.Url.Scheme, Request.Url.Host);
if (!Request.Url.IsDefaultPort)
sb.AppendFormat(":{0}", Request.Url.Port);
if (!string.Equals("/", Request.ApplicationPath))
sb.Append(Request.ApplicationPath);
return sb.ToString();
}
}
В CMS есть то, что я искал, что-то лаконичное и запоминающееся, Стивен Байер получает голос за лакомство.