Мне нужно иметь возможность получить полный URL-адрес страницы, с которой я подключен, от пользовательского элемента управления. Это просто вопрос объединения связки переменных запроса? Если да, то какие? Или есть ли еще способ simpiler?
Как получить полный URL-адрес страницы, на которой я нахожусь в С#
Ответ 1
Я обычно использую Request.Url.ToString()
, чтобы получить полный url (включая запрос), не требуется никакого конкатенации.
Ответ 2
Вот список, на который я обычно ссылаюсь для этого типа информации:
Request.ApplicationPath : /virtual_dir
Request.CurrentExecutionFilePath : /virtual_dir/webapp/page.aspx
Request.FilePath : /virtual_dir/webapp/page.aspx
Request.Path : /virtual_dir/webapp/page.aspx
Request.PhysicalApplicationPath : d:\Inetpub\wwwroot\virtual_dir\
Request.QueryString : /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.AbsolutePath : /virtual_dir/webapp/page.aspx
Request.Url.AbsoluteUri : http://localhost:2000/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Host : localhost
Request.Url.Authority : localhost:80
Request.Url.LocalPath : /virtual_dir/webapp/page.aspx
Request.Url.PathAndQuery : /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Port : 80
Request.Url.Query : ?q=qvalue
Request.Url.Scheme : http
Request.Url.Segments : /
virtual_dir/
webapp/
page.aspx
Надеюсь, вы найдете это полезным!
Ответ 3
Request.Url.AbsoluteUri
Это свойство делает все, что вам нужно, все в одном подозрительном вызове.
Ответ 4
Request.RawUrl
Ответ 5
если вам нужен полный URL-адрес как все, начиная с http до строки запроса, вам нужно будет объединить следующие переменные
Request.ServerVariables("HTTPS") // to check if it HTTP or HTTPS
Request.ServerVariables("SERVER_NAME")
Request.ServerVariables("SCRIPT_NAME")
Request.ServerVariables("QUERY_STRING")
Ответ 6
Лучше использовать Request.Url.OriginalString
, чем Request.Url.ToString()
(согласно MSDN)
Ответ 7
Спасибо, ребята, я использовал комбинацию ваших ответов @Christian и @Jonathan для моей конкретной потребности.
"http://" + Request.ServerVariables["SERVER_NAME"] + Request.RawUrl.ToString()
Мне не нужно беспокоиться о безопасном http, нужна переменная servername, а RawUrl обрабатывает путь от имени домена и включает в себя запрос, если он присутствует.
Ответ 8
Если вам нужен номер порта, вы можете использовать
Request.Url.Authority
Пример:
string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();
if (Request.ServerVariables["HTTPS"] == "on")
{
url = "https://" + url;
}
else
{
url = "http://" + url;
}
Ответ 9
Для ASP.NET Core
вам нужно указать:
@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
Или вы можете добавить инструкцию к вашему представлению:
@using Microsoft.AspNetCore.Http.Extensions
затем
@Context.Request.GetDisplayUrl()
_ViewImports.cshtml
может быть лучшим местом для этого @using