Получить полный URL-адрес запроса, включая параметры в контроллере - PullRequest
34 голосов
/ 04 ноября 2008

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

Я проверил этот вопрос, но, похоже, он не применим к MVC.

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

Более подробная информация:

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

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

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

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

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

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

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

Ответы [ 5 ]

44 голосов
/ 02 июля 2011

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

MVC5: используйте Request.RequestUri.PathAndQuery

23 голосов
/ 04 ноября 2008
HttpContext.Current.Request.RawUrl
HttpContext.Current.Request.QueryString

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

2 голосов
/ 09 ноября 2014
Request.RawUrl

Используйте это свойство, чтобы вернуть все URL.

2 голосов
/ 04 ноября 2008

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

HttpContext.Current.Request

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

0 голосов
/ 05 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...