我需要将我的OData服务更新到第三版。现在,我只使用NuGet存储库中的new更改了旧库,并在DataServiceConfiguration中将属性MaxProtocolVersion更改为V3。
可能这还不够?有人知道,我必须做些什么来支持我的应用程序中的任何/所有过滤器?
当我尝试发送这样的请求时:
http://expamle.com/OData.svc/Contacts?$ filter = Phones / any(p:p / Number eq'111-222-333-11')
我的应用程序抛出此异常:
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code>4</code>
<message xml:lang="" />
<innererror>
<message>No property 'any' exists in type 'City' at position 5.</message>
<type>System.Data.Services.DataServiceException</type>
<stacktrace>
at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseMemberAccess(Expression instance)
at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParsePrimary()
at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseUnary()
at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseMultiplicative()
at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseAdditive()
at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseComparison()
at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseLogicalAnd()
at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseLogicalOr()
at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseExpression()
at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseWhere()
at System.Data.Services.Parsing.RequestQueryParser.ParseLambdaForWhere(IDataService service, RequestDescription requestDescription, Type queryElementType, String expression)
at System.Data.Services.Parsing.RequestQueryParser.Where(IDataService service, RequestDescription requestDescription, Expression source, String predicate)
at System.Data.Services.RequestQueryProcessor.ProcessFilter() at System.Data.Services.RequestQueryProcessor.ProcessQuery()
at System.Data.Services.RequestQueryProcessor.ProcessQuery(IDataService service, RequestDescription description)
at System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri absoluteRequestUri, IDataService service, Boolean internalQuery)
at System.Data.Services.DataService`1.ProcessIncomingRequestUri()
at System.Data.Services.DataService`1.HandleRequest()
</stacktrace>
</innererror>
</error>
答案 0 :(得分:1)
您确定在DataServiceBehavior中启用了任何/所有支持吗? http://msdn.microsoft.com/en-us/library/system.data.services.dataservicebehavior.acceptanyallrequests(v=vs.103).aspx
答案 1 :(得分:0)
您可能需要将WCF数据服务更新为5.0以支持v3 - 您可以下载here。
答案 2 :(得分:0)
听起来城市是一个单身人士(不是一个集合),在这种情况下你不需要任何东西,这样的东西就可以正常工作:
即。 http://example.com/OData.svc/Contacts?$filter=City/Name eq 'New York'
Any / All仅适用于$ filter中引用的集合。