Mono兼容的OData v4客户端

时间:2014-08-06 11:29:06

标签: .net mono xamarin.ios xamarin odata

对于(iOS / Android)Xamarin项目,我需要与OData v4 API进行通信。我首先看了Simple OData Client,但该库还不支持OData v4。

我现在正在尝试使用OData客户端代码生成器(使用Microsoft's OData Client):

var commonContainer = new Default.Container(new Uri(serviceUri)); 
commonContainer.BuildingRequest += (sender, args) => 
    args.Headers.Add("Authorization", "Bearer " + _token);
var companies = await commonContainer.Company.ExecuteAsync();

然而,这引发了以下异常:

  

Microsoft.OData.Client.DataServiceQueryException:处理此请求时发生错误。 ---> System.InvalidOperationException:处理此请求时发生错误。 ---> System.InvalidCastException:无法从源类型转换为目标类型。\ n在Microsoft.OData.Client.QueryResult.AsyncEndRead(System.Threading.Tasks.Task任务,System.Object asyncState)[0x00000] in:0 \ n - - 内部异常堆栈跟踪结束--- \ n在Microsoft.OData.Client.BaseAsyncResult.EndExecute [QueryResult](System.Object source,System.String方法,IAsyncResult asyncResult)[0x00000]中:0 \ n在Microsoft。 OData.Client.QueryResult.EndExecuteQuery [Company](System.Object source,System.String方法,IAsyncResult asyncResult)[0x00000] in:0 \ n ---内部异常堆栈跟踪结束--- \ n在Microsoft.OData .Client.QueryResult.EndExecuteQuery [Company](System.Object source,System.String方法,IAsyncResult asyncResult)[0x00000] in:0 \ n at Microsoft.OData.Client.DataServiceRequest.EndExecute [Company](System.Object source, Microsoft.OData.Client.DataServiceContext context,System.String方法,IAsyncResult asyncResult)[0x00000] in:0 \ n ---堆栈跟踪结束f抛出异常的前一个位置--- \ n在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()[0x00000] in:0 \ n at System.Runtime.CompilerServices.ConfiguredTaskAwaitable 1+ConfiguredTaskAwaiter[System.Collections.Generic.IEnumerable 1 [MyApp.Api .MyDomainModel.Company]]。GetResult()[0x00000] in:0 \ n at MyApp.MyApi + d _c.MoveNext()[0x000d8] in c:\ Workspace \ MyApp \ trunk \ MyApp \ MyApp \ MyApp \ MyApi.cs :54 \ n ---从抛出异常的上一个位置开始的堆栈跟踪结束--- \ n在System.Runtime.CompilerServices中的System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()[0x00000]中:0 \ n。 TaskAwaiter 1[System.Collections.Generic.IEnumerable 1 [MyApp.Api.MyDomainModel.Company]]。GetResult()[0x00000] in:0 \ n at MyApp.ContentPages.ConsultDashboardPage + d _11.MoveNext()[0x00040] in c:\ Workspace \ MyApp的\主干\ MyApp的\ MyApp的\ MyApp的\内容网页,\ ConsultDashboardPage.cs:15

这是否意味着Microsoft.OData与Mono没有(完全)兼容?

我可以使用不同的OData v4客户端,还是必须使用HttpClient创建自己的OData请求?

1 个答案:

答案 0 :(得分:0)

您可以选择各种类型的库http://www.odata.org/libraries/。也许你可以尝试新的C ++客户端https://github.com/OData/odatacpp,它应该具有更好的Mono功能。