Проблема с приложением 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. Буду следить за этим.
Попробуйте отладить ваш код без использования асинхронных методов. В общем случае асинхронные методы должны работать без каких-либо проблем, но иногда сложно понять, как на самом деле ведет себя реализованная логика.