Search code examples
c#xmlhttpclient

Post call for XML content using HttpClient


How to make XML content compatible with HttpClient.PostAsync() operation for the content and where do you specify the headers for Content-Type = application/xml.

Error -> Cannot convert string to HttpContent

public async Task GetCustomersAsync(string firstname, string lastname)
{
        using (var client = new HttpClient())
        {
            var content = "<soapenv:Envelope xmlns:xsi...";

            var response = await client.PostAsync("https://example.com/scripts/WebObj.exe/Client.woa/2/ws/ABC", content);

            var responseString = await response.Content.ReadAsStringAsync();
        }
    }

Solution

  • My guess is what you want to do is the following:

    public async Task<string> GetCustomersAsync(string firstname, string lastname)
    {
        using (var client = new HttpClient())
        {
            var content = new StringContent("<soapenv:Envelope xmlns:xsi...", Encoding.UTF8, "application/xml");;
    
            var response = await client.PostAsync("https://example.com/scripts/WebObj.exe/Client.woa/2/ws/ABC", content);
    
            return await response.Content.ReadAsStringAsync();
        }
    }
    

    OR

    using (var request = new HttpRequestMessage { RequesteUri = new Uri("POST_URL"), Method = HttpMethod.Post })
    {
        var content = new StringContent("<soapenv:Envelope xmlns:xsi...");
        request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
    }
    

    You can refer here to more information about other Content types that can be created and passed.