Получить полный URL-адрес запроса, включая параметры в контроллере

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

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

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

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

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

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

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

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

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

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

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


person Boris Callens    schedule 04.11.2008    source источник


Ответы (5)


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

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

person Serhiy    schedule 02.07.2011
comment
Хех, спасибо за ваш ответ, хотя этому вопросу как будто 2 года;) Тем временем вышли еще две версии MVC, и фреймворк MVC лучше поддерживает дополнительные параметры, что делает проблему спорной. - person Boris Callens; 04.07.2011

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

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

person Jeff Sheldon    schedule 04.11.2008
comment
Спасибо за ответ. Я обновлю свой вопрос, чтобы прояснить мою ситуацию. Пожалуйста, посмотрите. - person Boris Callens; 05.11.2008

Request.RawUrl

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

person Dino Liu    schedule 09.11.2014

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

HttpContext.Current.Request

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

person Roger Lipscombe    schedule 04.11.2008

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

person Haacked    schedule 04.11.2008
comment
Спасибо за ответ, но request.rawurl не содержит строку запроса. - person Boris Callens; 05.11.2008