ASP.NET: получить * реальный * необработанный URL - PullRequest
7 голосов
/ 23 апреля 2009

В ASP.NET есть ли способ получить реальный необработанный URL?

Например, если пользователь просматривает "http://example.com/mypage.aspx/%2F",, я бы хотел получить" http://example.com/mypage.aspx/%2F" вместо "http://example.com/mypage.aspx//".

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

В данный момент я пытаюсь использовать uri в заголовке авторизации (который работает), но я не могу полагаться на то, что он всегда там.

EDIT:

Что я действительно хочу сделать, так это уметь различать "http://example.com/mypage.aspx/%2F" и" http://example.com/mypage.aspx/%2F%2F".

Похоже, ASP.NET сначала преобразует "% 2F% 2F" в "//", а затем преобразует косую черту в одну косую черту.

Так что просто перекодировать не получится.

Ответы [ 8 ]

6 голосов
/ 23 апреля 2009

У меня работает следующий код:

IServiceProvider serviceProvider = (IServiceProvider)HttpContext.Current;
HttpWorkerRequest workerRequest = (HttpWorkerRequest)serviceProvider.GetService(typeof(HttpWorkerRequest));
string realUrl = workerRequest.GetServerVariable("HTTP_URL");

Обратите внимание, что это работает только при работе на IIS, а не под f.x. Сервер разработки ASP.NET!

Спасибо Lucero за ответ в другой теме и Zhaph за указание на эту тему.

6 голосов
/ 23 апреля 2009

Я не смог проверить это, потому что он работает только в IIS, а не на сервере разработки ASP.NET, который является частью Visual Studio, но попробуйте:

Request.ServerVariables ["HTTP_URL"]

2 голосов
/ 23 апреля 2009
1 голос
/ 23 апреля 2009

Request.RawUrl вернет относительный путь приложения (включая информацию строки запроса), а Request.Url вернет полный путь (включая информацию строки запроса).

Для получения дополнительной информации см. « Определение путей ASP.NET ».

1 голос
/ 23 апреля 2009
 Server.HtmlEncode(Request.RawUrl);

Необработанный URL-адрес определяется как часть URL-адреса, следующего за информацией о домене. В строке URL-адреса http://www.contoso.com/articles/recent.aspx, необработанным URL-адресом является /articles/recent.aspx. Необработанный URL-адрес включает строку запроса, если имеется.

см. Также: текст ссылки

0 голосов
/ 23 апреля 2009

Получить URL-адрес из запроса и кодировать только часть строки запроса, а затем объединить их

0 голосов
/ 23 апреля 2009

Я не могу проверить здесь, но это может быть то, что вам нужно:

Request.Url.AbsoluteUri
0 голосов
/ 23 апреля 2009

Ну, вы можете просто закодировать его обратно в версию с кодировкой URL.

...