Tengo una cadena en .NET que en realidad es una url. Quiero una manera fácil de obtener el valor de un parámetro en particular.
Normalmente, solo usaría Request.Params["theThingIWant"]
, pero esta cadena no es de la solicitud. Puedo crear un nuevo Uri
elemento así:
Uri myUri = new Uri(TheStringUrlIWantMyValueFrom);
Puedo usar myUri.Query
para obtener la cadena de consulta ... pero luego aparentemente tengo que encontrar alguna forma regexy de dividirla.
¿Me estoy perdiendo algo obvio, o no hay una forma integrada de hacer esto, salvo crear una expresión regular de algún tipo, etc.?
HttpUtility.ParseQueryString(myUri.Query).Get(0)
embargo, aún puede usarlo y extraerá el primer parámetro. `HttpUtility.ParseQueryString(string)
! Como su nombre lo indica, es para analizar cadenas de consulta, no URL con parámetros de consulta. Si desea hacerlo, primero debe dividirlo de?
esta manera:Url.Split('?')
y obtener el último elemento usando (dependiendo de la situación y lo que necesita)[0]
o LINQ'sLast()
/LastOrDefault()
.Esto es probablemente lo que quieres
fuente
Aquí hay otra alternativa si, por alguna razón, no puede o no quiere usar
HttpUtility.ParseQueryString()
.Esto está diseñado para ser algo tolerante a las cadenas de consulta "malformadas", es decir, se
http://test/test.html?empty=
convierte en un parámetro con un valor vacío. La persona que llama puede verificar los parámetros si es necesario.Prueba
fuente
@Andrew y @CZFox
Tuve el mismo error y descubrí que la causa es que ese parámetro es de hecho:
http://www.example.com?param1
y noparam1
cuál es lo que uno esperaría.Al eliminar todos los caracteres anteriores e incluir el signo de interrogación, se soluciona este problema. Entonces, en esencia, la
HttpUtility.ParseQueryString
función solo requiere un parámetro de cadena de consulta válido que contenga solo caracteres después del signo de interrogación como en:Mi solución alternativa:
fuente
ParseQueryString
analiza cadenas de consulta.Parece que deberías recorrer los valores
myUri.Query
y analizarlos desde allí.Sin embargo, no usaría este código sin probarlo en un montón de URL malformadas. Podría romperse en algunos / todos estos:
hello.html?
hello.html?valuelesskey
hello.html?key=value=hi
hello.html?hi=value?&b=c
fuente
Puede usar la siguiente solución alternativa para que también funcione con el primer parámetro:
fuente
Use .NET Reflector para ver el
FillFromString
método deSystem.Web.HttpValueCollection
. Eso le da el código que ASP.NET está usando para completar laRequest.QueryString
colección.fuente
O si no conoce la URL (para evitar la codificación, use el
AbsoluteUri
Ejemplo ...
fuente
si desea obtener su QueryString en la página predeterminada. Página predeterminada significa la URL de su página actual. puedes probar este código:
fuente
Esto es realmente muy simple, y eso funcionó para mí :)
fuente
Para cualquiera que quiera recorrer todas las cadenas de consulta desde una cadena
fuente
fuente
Lo usé y funciona perfectamente
fuente