Xamarin App 和 Web API 模型绑定问题:传递给服务的对象仅在 iOS 上为空
Issue with Xamarin App and Web API Model Binding: Object passed to service is null only on iOS
我 运行 遇到了一个非常奇怪的问题,我什至不确定这是我的应用程序还是我调用的网络服务的问题。
我有一个 Web Api 服务,其 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 上测试时,代码按预期工作:服务被调用,传递的对象不为 null 并且其中包含数据。简而言之,参数绑定按预期工作。 iOS 上的情况并非如此:当我在 iPhone 上使用应用程序调用服务时,我可以看到它正在到达服务和 Post 方法,但参数绑定无法正常工作,因为我传递的对象始终为空。
感谢任何帮助。
尝试在不使用任何异步方法的情况下调试您的代码。异步方法通常应该可以正常工作,没有任何问题,但有时很难理解实现逻辑的实际行为。
问题已解决。问题实际上是请求的大小。我在检查请求对象的内容后在我的 Web Api 服务中发现了这一点,并收到了超出请求长度的异常。我的解决方案是增加 web.config 中 属性 maxrequestlength 的值。这仍然不能解释为什么 iOS 中的请求比 Android 中的请求大得多。会跟进此事。
我 运行 遇到了一个非常奇怪的问题,我什至不确定这是我的应用程序还是我调用的网络服务的问题。
我有一个 Web Api 服务,其 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 上测试时,代码按预期工作:服务被调用,传递的对象不为 null 并且其中包含数据。简而言之,参数绑定按预期工作。 iOS 上的情况并非如此:当我在 iPhone 上使用应用程序调用服务时,我可以看到它正在到达服务和 Post 方法,但参数绑定无法正常工作,因为我传递的对象始终为空。
感谢任何帮助。
尝试在不使用任何异步方法的情况下调试您的代码。异步方法通常应该可以正常工作,没有任何问题,但有时很难理解实现逻辑的实际行为。
问题已解决。问题实际上是请求的大小。我在检查请求对象的内容后在我的 Web Api 服务中发现了这一点,并收到了超出请求长度的异常。我的解决方案是增加 web.config 中 属性 maxrequestlength 的值。这仍然不能解释为什么 iOS 中的请求比 Android 中的请求大得多。会跟进此事。