0

In my Xamarin Forms app I have a very basic GET request that results in a 504 'Method not allowed' on Android.

This is the controller that I am calling:

[AllowAnonymous]
[HttpGet]
[Route("api/system/backendversion")]
public int GetBackendVersion()
{     
    return 20200924; 
}

This is the code that performs the request

var _client = new HttpClient();
var content = new StringContent(json, Encoding.UTF8, "application/json");
var httpRequest = new HttpRequestMessage(httpMethod, url)
{
    Content = content,
    Version = HttpVersion.Version10
};

var response = await _client.SendAsync(httpRequest);

The problem disappears when I change the HttpClient implementation from "Android" to "Managed". Also the webrequest works fine in the XF.UWP version of my app.

I believe I put it on Android for a reason, but I'm unsure what the reason was (probably speed). I'm curious what goes wrong here.

Sjors Miltenburg
  • 2,540
  • 4
  • 33
  • 60

1 Answers1

0

Apperantly it breaks because the content (header?) is set to json when there is no json.

I fixed it like this:

var httpRequest = new HttpRequestMessage(httpMethod, url)
{                    
  Version = HttpVersion.Version10
};
if (!string.IsNullOrWhiteSpace(json))
{
  httpRequest.Content = new StringContent(json, Encoding.UTF8, "application/json");                    
}

var response = await _client.SendAsync(httpRequest);

this error is similar to iOS where you get an error if you put json body in a get request

 if (httpMethod == HttpMethod.Get && !string.IsNullOrWhiteSpace(json))
 {
   Debugger.Break();//a get request with a body is not allowed on iOS and results in a error https://stackoverflow.com/questions/56955595/1103-error-domain-nsurlerrordomain-code-1103-resource-exceeds-maximum-size-i
 }
Sjors Miltenburg
  • 2,540
  • 4
  • 33
  • 60