Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling Get Request with Json Body using httpclient

I came with an issue this morning where the Api which I am calling is a Get Method but to get Get the Data from it I had to send the json body this is working good when I am testing it in the post man but I am not able to implement it in my project where I am calling this using HttpClient

here is the screenshot of post

enter image description here

It also have a bearer token which I pass in Authorization

Now when I am try to implement this at client side here is my code

var stringPayload = JsonConvert.SerializeObject(json);
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Get,
    RequestUri = new Uri("https://myapiendpoint/serviceability/"),
    Content = new StringContent(stringPayload, Encoding.UTF8, "application/json"),
};
var response = await client.SendAsync(request).ConfigureAwait(false);
response.EnsureSuccessStatusCode();

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

when I call this method using this code I get

System.Net.HttpStatusCode.MethodNotAllowed - Status code 405

I also tried changing this line

 Method = HttpMethod.Get to Method = HttpMethod.Post

but still getting same error

I know this is bad implementation at API Side the request ideally should be POST but changing this is not in my hand and hence need to find the solution

like image 232
Ronak Shethia Avatar asked Oct 15 '25 17:10

Ronak Shethia


1 Answers

almost search all over and trying all the variant of using GET Method finally the solution which worked for me in this case was this

var client = new HttpClient();
client.BaseAddress = new Uri("https://baseApi/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("Authorization", string.Format("Bearer {0}", token));

var query = new Dictionary<string, string>
{
    ["pickup_postcode"] = 400703,
    ["delivery_postcode"] = 421204,
    ["cod"] = "0",
    ["weight"] = 2,
};
var url = "methodurl";

var response = await client.GetAsync(QueryHelpers.AddQueryString(url, query));
var responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
return JsonConvert.DeserializeObject<MyModel>(responseBody);

Got QueryHelpers from Microsoft.AspNetCore.WebUtilities package

like image 99
Ronak Shethia Avatar answered Oct 18 '25 08:10

Ronak Shethia



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!