2

我遇到了一个非常奇怪的问题,我什至不确定这是我的应用程序还是我正在调用的 Web 服务的问题。

我有一个带有 Post 方法的 Web Api 服务,该方法接受一个复杂的参数(它是我自己的自定义对象)。在我的 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 方法,但参数绑定无法正常工作,因为我传递的对象是始终为空。

任何帮助表示赞赏。

4

2 回答 2

1

问题已解决。问题实际上是请求的大小。在检查了请求对象的内容后,我在我的 Web Api 服务中发现了这一点,并收到了超出请求长度的异常。我的解决方案是增加 web.config 中属性 maxrequestlength 的值。这仍然不能解释为什么 iOS 中的请求比 Android 大得多。将跟进此事。

于 2017-07-06T13:13:02.187 回答
0

尝试在不使用任何异步方法的情况下调试您的代码。异步方法通常应该可以正常工作,但有时很难理解实现的逻辑的实际行为方式。

于 2017-06-30T13:38:30.260 回答