A function import can not be used in query option, and if it is used, the error message should be specific.
Repro:
1. create a function import
2. use it in a query option such as
~/ConventionCustomers?$filter=GetConventionCustomerNameByIdImport(CustomerId=407)%20eq%20'Name%207'
Expected:
The error messages says the function import GetConventionCustomerNameByIdImport can not be used in query option.
Actual:
An unsupported query token kind 'RawFunctionParameterValue' was found.","type":"Microsoft.OData.Core.ODataException","stacktrace":"
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.Bind(QueryToken token)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.BindFunctionParameter(FunctionParameterToken token)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.Bind(QueryToken token)\r\n
Microsoft.OData.Core.UriParser.Parsers.FunctionCallBinder.<BindFunctionCall>b__8(FunctionParameterToken ar)\r\n
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()\r\n
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)\r\n
Microsoft.OData.Core.UriParser.Parsers.FunctionCallBinder.BindFunctionCall(FunctionCallToken functionCallToken, BindingState state)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.BindFunctionCall(FunctionCallToken functionCallToken)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.Bind(QueryToken token)\r\n
Microsoft.OData.Core.UriParser.Parsers.BinaryOperatorBinder.GetOperandFromToken(BinaryOperatorKind operatorKind, QueryToken queryToken)\r\n
Microsoft.OData.Core.UriParser.Parsers.BinaryOperatorBinder.BindBinaryOperator(BinaryOperatorToken binaryOperatorToken)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.BindBinaryOperator(BinaryOperatorToken binaryOperatorToken)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.Bind(QueryToken token)\r\n
Microsoft.OData.Core.UriParser.Parsers.FilterBinder.BindFilter(QueryToken filter)\r\n
Microsoft.OData.Core.UriParser.ODataUriParser.ParseFilterImplementation(String filter, IEdmType elementType, IEdmEntitySet entitySet)\r\n
Microsoft.OData.Core.UriParser.ODataUriParser.ParseFilter(String filter, IEdmModel model, IEdmType elementType)\r\n
System.Web.Http.OData.Query.FilterQueryOption.get_FilterClause() in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\OData\\Query\\FilterQueryOption.cs:line 66\r\n
System.Web.Http.OData.Query.Validators.FilterQueryValidator.Validate(FilterQueryOption filterQueryOption, ODataValidationSettings settings) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\OData\\Query\\Validators\\FilterQueryValidator.cs:line 54\r\n
System.Web.Http.OData.Query.FilterQueryOption.Validate(ODataValidationSettings validationSettings) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\OData\\Query\\FilterQueryOption.cs:line 152\r\n
System.Web.Http.OData.Query.Validators.ODataQueryValidator.Validate(ODataQueryOptions options, ODataValidationSettings validationSettings) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\OData\\Query\\Validators\\ODataQueryValidator.cs:line 52\r\n
System.Web.Http.OData.Query.ODataQueryOptions.Validate(ODataValidationSettings validationSettings) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\OData\\Query\\ODataQueryOptions.cs:line 380\r\n
System.Web.Http.QueryableAttribute.ValidateQuery(HttpRequestMessage request, ODataQueryOptions queryOptions) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\QueryableAttribute.cs:line 439\r\n
System.Web.Http.QueryableAttribute.ExecuteQuery(Object response, HttpRequestMessage request, HttpActionDescriptor actionDescriptor) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\QueryableAttribute.cs:line 498\r\n
System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\QueryableAttribute.cs:line 383
Comments: The Error message is returned from ODL UriParser. WebApi can't know how to re-format this error message.
Repro:
1. create a function import
2. use it in a query option such as
~/ConventionCustomers?$filter=GetConventionCustomerNameByIdImport(CustomerId=407)%20eq%20'Name%207'
Expected:
The error messages says the function import GetConventionCustomerNameByIdImport can not be used in query option.
Actual:
An unsupported query token kind 'RawFunctionParameterValue' was found.","type":"Microsoft.OData.Core.ODataException","stacktrace":"
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.Bind(QueryToken token)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.BindFunctionParameter(FunctionParameterToken token)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.Bind(QueryToken token)\r\n
Microsoft.OData.Core.UriParser.Parsers.FunctionCallBinder.<BindFunctionCall>b__8(FunctionParameterToken ar)\r\n
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()\r\n
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)\r\n
Microsoft.OData.Core.UriParser.Parsers.FunctionCallBinder.BindFunctionCall(FunctionCallToken functionCallToken, BindingState state)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.BindFunctionCall(FunctionCallToken functionCallToken)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.Bind(QueryToken token)\r\n
Microsoft.OData.Core.UriParser.Parsers.BinaryOperatorBinder.GetOperandFromToken(BinaryOperatorKind operatorKind, QueryToken queryToken)\r\n
Microsoft.OData.Core.UriParser.Parsers.BinaryOperatorBinder.BindBinaryOperator(BinaryOperatorToken binaryOperatorToken)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.BindBinaryOperator(BinaryOperatorToken binaryOperatorToken)\r\n
Microsoft.OData.Core.UriParser.Parsers.MetadataBinder.Bind(QueryToken token)\r\n
Microsoft.OData.Core.UriParser.Parsers.FilterBinder.BindFilter(QueryToken filter)\r\n
Microsoft.OData.Core.UriParser.ODataUriParser.ParseFilterImplementation(String filter, IEdmType elementType, IEdmEntitySet entitySet)\r\n
Microsoft.OData.Core.UriParser.ODataUriParser.ParseFilter(String filter, IEdmModel model, IEdmType elementType)\r\n
System.Web.Http.OData.Query.FilterQueryOption.get_FilterClause() in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\OData\\Query\\FilterQueryOption.cs:line 66\r\n
System.Web.Http.OData.Query.Validators.FilterQueryValidator.Validate(FilterQueryOption filterQueryOption, ODataValidationSettings settings) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\OData\\Query\\Validators\\FilterQueryValidator.cs:line 54\r\n
System.Web.Http.OData.Query.FilterQueryOption.Validate(ODataValidationSettings validationSettings) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\OData\\Query\\FilterQueryOption.cs:line 152\r\n
System.Web.Http.OData.Query.Validators.ODataQueryValidator.Validate(ODataQueryOptions options, ODataValidationSettings validationSettings) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\OData\\Query\\Validators\\ODataQueryValidator.cs:line 52\r\n
System.Web.Http.OData.Query.ODataQueryOptions.Validate(ODataValidationSettings validationSettings) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\OData\\Query\\ODataQueryOptions.cs:line 380\r\n
System.Web.Http.QueryableAttribute.ValidateQuery(HttpRequestMessage request, ODataQueryOptions queryOptions) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\QueryableAttribute.cs:line 439\r\n
System.Web.Http.QueryableAttribute.ExecuteQuery(Object response, HttpRequestMessage request, HttpActionDescriptor actionDescriptor) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\QueryableAttribute.cs:line 498\r\n
System.Web.Http.QueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext) in c:\\WebApi\\aspnetwebstack\\src\\System.Web.OData\\QueryableAttribute.cs:line 383
Comments: The Error message is returned from ODL UriParser. WebApi can't know how to re-format this error message.