Проблема с приложением Xamarin и привязкой модели веб-API: объект, переданный службе, является пустым только на iOS

У меня возникла очень странная проблема, и я даже не уверен, является ли это проблемой с моим приложением или веб-сервисом, которому я звоню.

У меня есть Web Api Service с методом Post, который принимает сложный параметр (это мой собственный объект). В моем проекте Xamarin у меня есть довольно простой код для вызова этой службы:

public async Task SubmitEReport(decimal amount, DateTime receivedDate, 
byte[] image)
{
    try
    {
        HttpClient client = new HttpClient();

        var uri = new Uri("https://services.example.com/EPub/api/Expense/");

        var eReport = new eReport()
        {
            UserName = "EMPLOYEE\" + Application.Current.Properties["username"].ToString(),
            Cost = amount,
            ReceivedDate= receivedDate,
            ReceiptImageExtension = "jpg",
            SubmittalDate = DateTime.Now,
            Image = image
        };

        var json = JsonConvert.SerializeObject(eReport );

        var content = new System.Net.Http.StringContent(json, Encoding.UTF8, "application/json");

        content.Headers.Add("authorize-token", Application.Current.Properties["auth-token"] as string);

        HttpResponseMessage response = null;

        response = await client.PostAsync(uri, content);

        var eResult = new EResult()
        {
            Success = response.IsSuccessStatusCode,
            ErrorMessage = response.ReasonPhrase


        };

        return eResult ;
    }
    catch (Exception ex)
    {
        var errorResult = new eResult () { Success = false, ErrorMessage = ex.Message };
        return errorResult;
    }
}

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я тестирую это на Android, код работает должным образом: служба вызывается, переданный объект не является нулевым и содержит данные. Короче говоря, привязка параметров работает как положено. То же самое не так на iOS: когда я вызываю сервис с помощью приложения на iPhone, я вижу, что он достигает сервиса и метода Post, но привязка параметров работает неправильно, так как объект, который я передаю, всегда ноль

Любая помощь приветствуется.

2 ответа

Решение

Проблема решена. Проблема была на самом деле в размере запроса. Я обнаружил это в своем сервисе Web Api после изучения содержимого объекта запроса и получил исключение, что длина запроса была превышена. Моим решением было увеличить значение свойства maxrequestlength в файле web.config. Это все еще не объясняет, почему запрос в iOS намного больше, чем в Android. Буду следить за этим.

Попробуйте отладить ваш код без использования асинхронных методов. В общем случае асинхронные методы должны работать без каких-либо проблем, но иногда сложно понять, как на самом деле ведет себя реализованная логика.

Другие вопросы по тегам