Adeptus Mechanicus
Adeptus Mechanicus

Reputation: 171

HttpClient doesn't works in IOs app builded in VS with Xamarin

I try to make an awaitable request in my PCL/Android/iOs project. Function for request is in PCL

public class DataService
{
    private static string _requestUri = "https://requesturi.com/";
    public static async Task<LocalizationData> GetLocalization(string code)
    {
        string queryString = _requestUri + "get_localization.php" + "?code=" + code;
        HttpClient client = new HttpClient();
        var response = await client.GetAsync(queryString);
        dynamic data = null;
        if (response != null)
        {
            string json = response.Content.ReadAsStringAsync().Result;
            data = JsonConvert.DeserializeObject(json);
            if (data["status"] == "success")
            {
                List<string> aliases = new List<string>();
                List<string> translations = new List<string>();
                foreach (var localization in data["localizations"])
                {
                    aliases.Add((string)localization["alias"]);
                    translations.Add((string)localization["translation"]);
                }
                LocalizationData localizationData = new LocalizationData(code, aliases.ToArray(), translations.ToArray());
                return localizationData;
            }
            else
            {
                return null;
            }
        }
        return null;
    }
}

Both in Android and iOS I call this function with

localizationData = await DataService.GetLocalization(langCode);

In Android it works without problems both on simulator and on real device. But when I try run it in iOS, on simulator it works fine, on real device app crash on

var response = await client.GetAsync(queryString);

Is it something about permissions? Or something else? Can anybody help me with this problem?

UPDATED

There are exception for client.GetAsync(queryString) I get in app on real device: "Operation is not valid due to the current state of the object"

Upvotes: 0

Views: 2081

Answers (1)

Vladimir
Vladimir

Reputation: 355

According to the thread in Xamarin forum this is issue with Reference. Seems like httpClient instance was created in mono memory but not in iOS memory, due to a difference between an iOS device(AOT) and simulator(JIT) build nature.

Try :

1) Go to References of ios Project

2) Edit References

3) Check 'System.Net.Http'

In general - use ModernHttpClient - it provides wrappers for native networking API, it is secure and faster then default .Net HttpClient.

Upvotes: 2

Related Questions