2008-11-04 27 views
29

¿Cómo obtengo la URL de solicitud completa (incluida la cadena de consulta) en mi controlador? ¿Es una cuestión de concatenar mi URL y parámetros de forma o hay una mejor manera.Obtener URL de solicitud completa, incluidos los parámetros en el controlador

Comprobé this pregunta, pero parece no ser aplicable a MVC.

Corrígeme si me equivoco.

Parte de la información más detallada:

Mi llamada a mi SearchController.AdvancedSearch() origina a partir de un formulario con unos 15 parámetros opcionales. Debido a la cantidad de parámetros y de ninguna manera posible (creo) de tener parámetros opcionales pasados ​​de una manera limpia, busqué una cadena catchall que se maneje en el controlador.

Ahora quiero que mi controlador almacene su llamada en un componente breadcrumb para que cuando se hace clic en la miga pueda obtenerse exactamente el mismo resultado (con todos, pero no más, los argumentos incluidos). Para hacer esto, necesito toda la request.URL, que incluye la querystring.

En Request.RawURL, request.URL etc. esta cadena de consulta no está incluida. De hecho, actualmente hago una función simple.

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

Esto me da algunos resultados raros (como los valores del botón de envío, etc.), pero funciona. Si hay sugerencias sobre cómo hacer que este no sea un hack feo, dígaselo.

Sé dónde encontrar la solicitud actual, pero parece que no puedo encontrar una URL sin procesar en ninguna parte. Todos están privados de la cadena de consulta y yo también necesito eso.

Mi controlador actualiza una colección de URL en mi componente BreadCrumb. Por lo tanto, necesita la URL de solicitud. ¿Cómo sugieres que asuma este problema?

Respuesta

37

Puede usar Request.Url.PathAndQuery.

MVC5: utilizar Request.RequestUri.PathAndQuery

+2

Heh, gracias por su respuesta, aunque esta pregunta tiene como 2 años;) Mientras tanto, dos versiones más de MVC han salido y los parámetros opcionales son más compatibles con el framework MVC, lo que hace que el problema discutible. –

1

Usted puede obtener en la solicitud objeto actual utilizando:

HttpContext.Current.Request 

Sin embargo, he que preguntarte - ¿Por qué quiere la URL de solicitud? Al hacer esto, ha hecho que su controlador dependa del objeto Request, lo que hará que las pruebas de su unidad sean mucho más difíciles de escribir.

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

En cuanto a su segunda pregunta. En lugar de rastrear las URLs, consultar información de cadenas, etc., a las que ha recurrido su usuario. Rastrea los controladores y las acciones llamadas. Eso eliminaría por completo la necesidad del objeto Solicitud.

+0

Gracias por la respuesta. Actualizaré mi pregunta para que mi situación sea un poco más clara. Por favor échale un vistazo. –

0

Dentro del controlador, puede acceder al Request.RawUrl.

+0

Gracias por la respuesta, pero la solicitud.rawurl no contiene la cadena de consulta –

2
Request.RawUrl 

Utilice esta propiedad es devolver el todo url.

Cuestiones relacionadas