Search code examples
androidxamarinxamarin.formsdotnet-httpclient

XF 504 on Get request when using Android HttpClient implementation


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.


Solution

  • 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
     }