Query-params w żądaniu

0

Hej, mam taką metodę, która wysyła żądanie typu GET na adres: http://localhost:7412/items

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost:7412");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage result = await client.GetAsync("items");       // wysyłka GET'a

    //dalej nieistotne
}

Chciałbym dodać query params, np: available=true, minPrice=24 czyli wysłać: http://localhost:7412/items?available=true&minPrice=24
Ale nie wiem jak dodać te query params

6

Próbowałeś wpisać w google "c# httpclient query params"? https://stackoverflow.com/questions/17096201/build-query-string-for-system-net-httpclient-get

1

Po prostu dodajesz je do żądania :| Czyli:

HttpResponseMessage result = await client.GetAsync("items?available=true");

Ale masz dwa dużo większe problemy. Przede wszystkim wskazanie BaseAddress - dodawaj na koniec slash, bo jeśli tego nie zrobisz, to w pewnych sytuacjach mogą być problemy.

Poza tym sposób w jaki używasz HttpClienta jest niepoprawny. HttpClient ze względu na sposób w jaki działa nie może być tworzony w taki sposób. Trzeba do tego użyć specjalnej fabryki (HttpClientFactory). Chyba, że robisz aplikację desktopową, która będzie uruchamiana i zamykana "ciągle".

Generalnie pisałem o tym kiedyś artykuł tutaj: Jak poprawnie korzystać z HttpClient

4
Juhas napisał(a):

Poza tym sposób w jaki używasz HttpClienta jest niepoprawny. HttpClient ze względu na sposób w jaki działa nie może być tworzony w taki sposób. Trzeba do tego użyć specjalnej fabryki (HttpClientFactory). Chyba, że robisz aplikację desktopową, która będzie uruchamiana i zamykana "ciągle".

Generalnie pisałem o tym kiedyś artykuł tutaj: Jak poprawnie korzystać z HttpClient

Artykuł i wskazówka jest troszkę niepełnym przełożeniem dokumentacji. To było prawdziwe w czasach .NET Framework ale w .NET Core od wersji 2.1 wystarczy stworzenie statycznego HttpClienta i ustawienie PooledConnectionLifetime
https://learn.microsoft.com/en-us/dotnet/fundamentals/networking/http/httpclient-guidelines#recommended-use
Nadal w .NET Core 2.1, .NET 5 i nowszych MOŻNA używać IHttpClientFactory ale nie jest to już wymagane

0

No, przyda się aktualizacja :) Ale i tak albo używamy long-lived z ustawionym PooledConnectionLifetime, albo short-lived z fabryki:

To summarize recommended HttpClient use in terms of lifetime management, you should use either long-lived clients with PooledConnectionLifetime set up (.NET Core and .NET 5+) or short-lived clients created by IHttpClientFactoryDodaj cytat...

OP nie ma ani tego, ani tego ;)
Osobiście wolę cały czas podejście z short-lived i fabryką, bo wydaje się to prostsze i wygodniejsze jeśli chodzi np. o dependency injection.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.