2008-11-04 3 views
29

Как получить полный URL-адрес запроса (включая строку запроса) в моем контроллере? Это вопрос конкатенации моих параметров URL и формы или есть лучший способ.Получить полный запрос url, включая параметры в контроллере

Я зарегистрировал this вопрос, но, похоже, он не применим к MVC.

Исправьте меня, если я ошибаюсь.

Некоторая более подробная информация:

Моего призыв к моему SearchController.AdvancedSearch() происходит из формы с около 15 дополнительных параметров. Из-за количества параметров и возможного способа (я думаю), чтобы иметь необязательные параметры, переданные чистым способом, я пошел на целую цепочку, которая обрабатывается в контроллере.

Теперь я хочу, чтобы мой контроллер сохранял свой вызов в компоненте «хлебная крошка», чтобы при щелчке крошки был получен один и тот же результат (со всеми включенными аргументами, но не более). Для этого мне нужен весь request.URL, , включая querystring.

В Request.RawURL, request.URL etc эта строка запроса не включена. На самом деле в настоящее время я выполняю простую функцию.

String.Format("{0}/{1}", request.Url, request.form) 

Это дает мне некоторые странные результаты (например, значения кнопки отправки и т. Д.), Но это работает. Если есть предложения о том, как сделать это менее уродливым взломом, скажите, пожалуйста.

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

Мой контроллер обновляет коллекцию URL-адресов в моем BreadCrumb компонентах. Поэтому ему нужен URL-адрес запроса. Как вы предлагаете мне решить эту проблему?

ответ

37

Вы можете использовать Request.Url.PathAndQuery.

MVC5: использовать Request.RequestUri.PathAndQuery

+2

Хех, спасибо за ваш ответ, хотя этот вопрос похож на 2 года;) В это время появились еще две версии MVC, а дополнительные параметры оцениваются MVC-каркасом, что делает проблему спорный вопрос. – 2011-07-04 07:51:48

1

Вы можете получить в текущем объекте запроса с помощью:

HttpContext.Current.Request 

Однако, я должен спросить - почему вы хотите, чтобы запрос URL? Делая это, вы сделали свой контроллер зависимым от объекта Request, что сделает ваши тесты устройств более сложными для записи.

21
HttpContext.Current.Request.RawUrl 
HttpContext.Current.Request.QueryString 

Что касается вашего второго вопроса. Вместо того, чтобы отслеживать информацию о URL-адресе, информацию о запросе и т. Д., К которой пришел ваш пользователь. Отслеживайте вызовы контроллеров и действий. Это полностью устранит необходимость в объекте Request.

+0

Спасибо за ответ. Я обновлю свой вопрос, чтобы сделать ситуацию более ясной. Пожалуйста, смотрите. – 2008-11-05 08:39:23

0

В пределах контроллера вы можете получить доступ к Request.RawUrl.

+0

Спасибо за ответ, но запросите.rawurl не содержит querystring – 2008-11-05 08:38:24

2
Request.RawUrl 

Используйте это свойство возвращает все URL.

Смежные вопросы