Mam ciąg w .NET, który w rzeczywistości jest adresem URL. Chcę w łatwy sposób uzyskać wartość z określonego parametru.
Normalnie po prostu użyłbym Request.Params["theThingIWant"]
, ale ten ciąg nie pochodzi z żądania. Mogę stworzyć nowy Uri
przedmiot w ten sposób:
Uri myUri = new Uri(TheStringUrlIWantMyValueFrom);
Mogę użyć, myUri.Query
aby uzyskać ciąg zapytania ... ale najwyraźniej muszę znaleźć jakiś dziwny sposób na podzielenie go.
Czy brakuje mi czegoś oczywistego, czy też nie ma wbudowanego sposobu na zrobienie tego poza utworzeniem jakiegoś wyrażenia regularnego itp.?
HttpUtility.ParseQueryString(myUri.Query).Get(0)
a to wyodrębni pierwszy parametr. `HttpUtility.ParseQueryString(string)
! Jak sama nazwa wskazuje, parsuje ciągi zapytań, a nie adresy URL z parametrami zapytań. Jeśli chcesz to zrobić, musisz najpierw podzielić go w?
następujący sposób:Url.Split('?')
i uzyskać ostatni element za pomocą (w zależności od sytuacji i tego, czego potrzebujesz)[0]
lub LINQLast()
/LastOrDefault()
.To jest prawdopodobnie to, czego chcesz
źródło
Oto kolejna alternatywa, jeśli z jakiegokolwiek powodu nie możesz lub nie chcesz używać
HttpUtility.ParseQueryString()
.Zostało to zbudowane tak, aby być nieco tolerancyjnym wobec „źle sformułowanych” ciągów zapytania, tzn.
http://test/test.html?empty=
Staje się parametrem o pustej wartości. Osoba dzwoniąca może w razie potrzeby zweryfikować parametry.Test
źródło
@Andrew i @CZFox
Miałem ten sam błąd i odkryłem, że przyczyną jest ten parametr, który w rzeczywistości jest jeden:
http://www.example.com?param1
a nieparam1
tego się można spodziewać.Usunięcie wszystkich znaków przed znakiem zapytania i włączenie go rozwiązuje ten problem. Zasadniczo więc
HttpUtility.ParseQueryString
funkcja wymaga tylko poprawnego parametru ciągu zapytania zawierającego tylko znaki po znaku zapytania, jak w:Moje obejście:
źródło
ParseQueryString
analizuje ciągi zapytań.Wygląda na to, że powinieneś zapętlić wartości
myUri.Query
i przeanalizować je stamtąd.Jednak nie użyłbym tego kodu bez przetestowania go na wielu źle sformatowanych adresach URL. Może się zepsuć na niektóre / wszystkie z nich:
hello.html?
hello.html?valuelesskey
hello.html?key=value=hi
hello.html?hi=value?&b=c
źródło
Możesz użyć następującego obejścia, aby działał również z pierwszym parametrem:
źródło
Użyj .NET Reflector, aby wyświetlić
FillFromString
metodęSystem.Web.HttpValueCollection
. To daje kod, którego używa ASP.NET do wypełnieniaRequest.QueryString
kolekcji.źródło
Lub jeśli nie znasz adresu URL (aby uniknąć zakodowania na stałe, użyj
AbsoluteUri
Przykład ...
źródło
jeśli chcesz uzyskać QueryString na stronie domyślnej. Domyślna strona oznacza bieżący adres strony. możesz wypróbować ten kod:
źródło
To jest naprawdę bardzo proste i to działało dla mnie :)
źródło
Dla każdego, kto chce przeglądać wszystkie ciągi zapytania z ciągu
źródło
źródło
Użyłem go i działa idealnie
źródło