GET požadavek včetně BODY   otázka

C#

Ahoj,

neřešili jste někdo odeslání GET požadavku včetně BODY přes HttpClient v.NET Frameworku?

Pokud použiji něco jako toto:

using (var client = new HttpClient())
{
    var request = new HttpRequestMessage
    {
        RequestUri = new Uri("some url"),
        Method = HttpMethod.Get,
    };

    request.Content = new ByteArrayContent(Encoding.UTF8.GetBytes("some json"));

    request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

    var result = client.SendAsync(request).Result;
    result.EnsureSuccessStatusCode();

    var responseBody = await result.Content.ReadAsStringAsync().ConfigureAwait(false);
}

vrací se ProtocolViolationException: Cannot send a content-body with this verb-type

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zdravím,

vytvářet HttpClient() ad-hoc v konstrukci s using ve většině případech není optimální.

Posílání payloadu v requestu metodou HTTP GET není doporučeno a HTTP standard říká, že by se obsahu nemělo přihlížet. Ideálně byste měl použít metodu POST/PUT a nebo pokud jen odesíláte menší množství dat (filtry atd.), můžete použít HTTP GET + query string. Ta chybová hláška Vám přímo říká, že HTTP VERB (tedy GET) neumožňuje poslat content-body.

Mimochodem jestliže máte JSON in-memory jako string, můžete rovnou použít StringContent() místo ByteArrayContent(). Chcete-li použít stream, pak zhruba:

using HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, "url");
using (var ms = new MemoryStream())
{
        await JsonSerializer.SerializeAsync(ms, DATA, jsonSerializerOptions);
        ms.Position = 0;
        message.Content = new StreamContent(ms, 1024);
        message.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        using var result = await httpClient.SendAsync(message);

Ten var result = client.SendAsync(request).Result také není úplně šťastné řešení - lze tam použít async/await...

Na téma konzumace REST API a práci s HttpClient mám i webinář, kdyby Vás téma zajímalo do hloubky: https://www.miroslavholec.cz/webinare

MH

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback