Mam zestaw adresów URL podobnych do poniższych na liście
- http://somesite.com/backup/lol.php?id=1&server=4&location=us
- http://somesite.com/news.php?article=1&lang=en
Udało mi się uzyskać ciągi zapytań za pomocą następującego kodu:
myurl = longurl.Split('?');
NameValueCollection qs = HttpUtility.ParseQueryString(myurl [1]);
foreach (string lol in qs)
{
// results will return
}
Ale zwraca tylko parametry, takie jak identyfikator , serwer , lokalizacja i tak dalej, na podstawie podanego adresu URL.
Potrzebuję dodania / dołączenia wartości do istniejących ciągów zapytań.
Na przykład z adresem URL:
http://somesite.com/backup/index.php?action=login&attempts=1
Muszę zmienić wartości parametrów ciągu zapytania:
action = login1
próby = 11
Jak widać, dodałem „1” do każdej wartości. Muszę pobrać zestaw adresów URL z ciągu zawierającego różne ciągi zapytań i dodać wartość do każdego parametru na końcu i ponownie dodać je do listy.
źródło
HttpUtility.UrlEncode()
przy przypisywaniu wartości parametru?HttpUtility.ParseQueryString
metoda zwraca specjalną implementację NameValueCollection, która już obsługuje to za kulisami, gdy ustawiasz wartość.Ja owinięty odpowiedź Darin do wielokrotnego użytku ładnie metodę rozszerzenia.
Mam nadzieję, że to pomoże!
źródło
Podane odpowiedzi mają problemy ze względnymi adresami URL, takimi jak „/ some / path /” Jest to ograniczenie klasy Uri i UriBuilder, które jest raczej trudne do zrozumienia, ponieważ nie widzę powodu, dla którego względne adresy URL byłyby problematyczne jeśli chodzi o manipulację zapytaniami.
Oto obejście, które działa zarówno dla ścieżek bezwzględnych, jak i względnych, napisanych i przetestowanych w .NET 4:
(mała uwaga: powinno to również działać w .NET 4.5, wystarczy zmienić
propInfo.GetValue(values, null)
napropInfo.GetValue(values)
)A oto zestaw testów jednostkowych do testowania zachowania:
źródło
uri.AbsoluteUri
zamiast zuri.ToString()
powodu nieprzyjemnych efektów, które nie uciekają.uri.AbsoluteUri
rzuty, jeśli uri nie jest bezwzględne!Uwaga, możesz dodać
Microsoft.AspNetCore.WebUtilities
pakiet NuGet firmy Microsoft, a następnie użyć tego do dołączenia wartości do ciągu zapytania:źródło
AddQueryString
polega na tym, że zawsze doda, jeśli jest już klucz, nie zaktualizuje, ale utworzy zduplikowane klucze, z jest złyPoniższe rozwiązanie działa w przypadku ASP.NET 5 (vNext) i używa klasy QueryHelpers do tworzenia identyfikatora URI z parametrami.
Wynikowy identyfikator URI miałby
http://iberia.com?param1=value1¶m2=value2¶m3=value3
źródło
Koniec wszystkich problemów związanych z edycją ciągu zapytania URL
Po wielu trudach i majstrowaniu przy klasie Uri i innych rozwiązaniach, oto moje metody rozszerzania ciągów , które rozwiązują moje problemy.
źródło
string
s do reprezentowania takich adresów URL, biorąc pod uwagę, żeUri
klasa już istnieje do tego celu. Użyj tego lub stwórz zupełnie nową abstrakcję, jeśli brakuje funkcji.Podoba mi się odpowiedź Bjorna, jednak podane przez niego rozwiązanie jest mylące, ponieważ metoda aktualizuje istniejący parametr, zamiast dodawać go, jeśli nie istnieje. Aby było trochę bezpieczniej, dostosowałem go poniżej.
źródło
query[paramName] = paramValue;
we wszystkich przypadkach. Jeśli istnieje, zostanie nadpisany. Jeśli nie istnieje, zostanie utworzony klucz.Moje podejście jest bardzo proste, dla początkujących:
źródło