asp.net mvc - net - Obtenga la URL de solicitud completa, incluidos los parámetros en el controlador
razor mvc (5)
Dentro del controlador, puede acceder a Request.RawUrl
.
¿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.
Revisé this pregunta, pero parece no ser aplicable a MVC.
Corrígeme si estoy equivocado.
Alguna información más detallada:
Mi llamada a mi SearchController.AdvancedSearch()
proviene de un formulario con aproximadamente 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 de ruta de navegación 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, incluida 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 enviar los valores de los botones, 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 en bruto 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?
Puede obtener el objeto de solicitud actual utilizando:
HttpContext.Current.Request
Sin embargo, tengo que preguntar: ¿por qué quieres 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.
Puede usar Request.Url.PathAndQuery
.
MVC5: use Request.RequestUri.PathAndQuery
HttpContext.Current.Request.RawUrl
HttpContext.Current.Request.QueryString
En cuanto a tu 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.
Request.RawUrl
Utilice esta propiedad para devolver la URL completa.