I've been trying to send a POST request using HttpClient without a body using the PostAsync
method. However, to my utter bewildement, the request is getting sent as a GET
and not a POST
.
Naturally, the request fails with a 405 Method Not Allowed
becase the server doesn't allow GET
.
Code sample:
var response = await new HttpClient().PostAsync("https://api.creativecommons.engineering/v1/auth_tokens/token?client_id=adsf&client_secret=asdf&grant_type=client_credentials", null);
Console.WriteLine(response.RequestMessage);
Produces:
Method: GET, RequestUri: 'https://api.creativecommons.engineering/v1/auth_tokens/token/?client_id=adsf&client_secret=asdf&grant_type=client_credentials', Version: 1.1
I've also tried using Flurl, but lead to the same result (I am guessing it is using HttpClient under the hood).
Any ideas why PostAsync
is sending the request as a GET rather than POST?
This question got quite a bit of hate without offering an ounce of constructive criticism... Well done StackOverflow, really well done, so much for being more welcoming...
If you come across a similar issue, here are the three things to look for:
RequestMessage
. This may be obvious in some cases, but in my case, the redirect involved adding a single /
not something easily visible in the debugger window!https://api.creativecommons.engineering/v1/auth_tokens/token?client_id=adsf&client_secret=asdf&grant_type=client_credentials
https://api.creativecommons.engineering/v1/auth_tokens/token/?client_id=adsf&client_secret=asdf&grant_type=client_credentials
^
I posted null to that body, looks like it is throwing a 405 and returning some information to look into. I believe the display of "GET" is deceiving.
EDIT: Ok, so to revise:
First the post executes and receives a 301 from the server.
Followed by a redirect to another endpoint (as a GET) with the result of 405. Thus, the net result of your request manifested as a GET with a 405. My mistake.