Несколько параметров $ filter в строке запроса вызывают исключение «Элемент с тем же ключом уже добавлен. Ключ: $ filter» - PullRequest
0 голосов
/ 17 марта 2020

Версии

  • ASP. Net Core MVC 3.1
  • Microsoft.AspNetCore.OData 7.3.0
  • . Net framework 4.8.03752
  • netcoreapp3.1
  • Microsoft.AspNetCore.OData 7.3.0 Дата публикации: понедельник, 23 декабря 2019 г. (23.12.2009)

Клиент обнаружил это, по ошибке введя два параметра $ filter в строку запроса, вызвав необработанное исключение, и я смог выполнить локальное воспроизведение на любой конечной точке. Это должно быть изящно обработано odata, а не cra sh.

Repro Steps

(убедитесь, что вы получите интервал точно так, как показано ниже)

https://localhost: 44349 / api / endpoint1 ? $ Filter = field1 eq 1 & $ filter = field2 eq true

Ожидаемая ошибка: обработано

(Если я удаляю пробел после «&», я получаю ожидаемую ошибку)

«Сообщение»: «Запрос, указанный в URI, недопустим. Синтаксическая ошибка в позиции 15 в 'regionId eq 1 , applyTimeTracking eq true '. "," ExceptionMessage ":" Синтаксическая ошибка в позиции 15 в' regionId eq 1, applyTimeTracking eq true '. "," ExceptionType ":" Microsoft.OData.ODataException ",

Фактическая ошибка: необработанная

System.ArgumentException: элемент с тем же ключом уже добавлен. Ключ: $ filter в System.Collections.Generi c .Dictionary 2.TryInsert(TKey key, TValue value, InsertionBehavior behavior) at Microsoft.AspNet.OData.Query.ODataQueryOptions.GetODataQueryParameters() at Microsoft.AspNet.OData.Query.ODataQueryOptions.Initialize(ODataQueryContext context) at Microsoft.AspNet.OData.Query.ODataQueryOptions..ctor(ODataQueryContext context, HttpRequest request) at Microsoft.AspNet.OData.EnableQueryAttribute.CreateAndValidateQueryOptions(HttpRequest request, ODataQueryContext queryContext) at Microsoft.AspNet.OData.EnableQueryAttribute.<>c__DisplayClass1_0.<OnActionExecuted>b__1(ODataQueryContext queryContext) at Microsoft.AspNet.OData.EnableQueryAttribute.ExecuteQuery(Object responseValue, IQueryable singleResultCollection, IWebApiActionDescriptor actionDescriptor, Func 2 modelFunction, запрос IWebApiRequestMessage, Fun c2 createQueryOptionFunction) at Microsoft.AspNet.OData.EnableQueryAttribute.OnActionExecuted(Object responseValue, IQueryable singleResultCollection, IWebApiActionDescriptor actionDescriptor, IWebApiRequestMessage request, Func 2 modelFunction, Fun c2 createQueryOptionFunction, Action 1 createResponseAction, Action`3 createErrorAction) в Microsoft.As pNet .OData.EnableQueryAttribute.OnActionExecuted (ActionExecutedContext actionExecutedContext) в Microsoft.AspNetCore. Mvc .Filters.ActionFilterAttribute.OnActionExecutionAsyn c (класс ActionExec. .ControllerActionInvoker.g__Awaited | 10_0 (вызывающий ControllerActionInvoker, задача LastTask, состояние далее, область действия области, состояние объекта, логическое значение isCompleted) в Microsoft.AspNetCore. Mvc .Infrastructure.ControllerActionInvoker.Rethrow (contextExecusedConore). * .Infrastructure.ControllerActionInvoker.Next (State & next, Scope & scope, Object & state, Boolean & isCompleted) в Microsoft.AspNetCore. Mvc .Infrastructure.ControllerActionInvoker.InvokeInn erFilterAsyn c () --- Конец трассировки стека из предыдущего местоположения, в котором было сгенерировано исключение --- в Microsoft.AspNetCore. Mvc .Infrastructure.ResourceInvoker.g__Awaited | 24_0 (ResourceInvoker invoker, Task lastTask, State next, Scope область действия, состояние объекта, логическое значение isCompleted) в Microsoft.AspNetCore. Mvc .Infrastructure.ResourceInvoker.Rethrow (контекст ResourceExecutedContextSealed) в Microsoft.AspNetCore. Mvc .Infrastructure.ResourceInvoker.Next (состояние и следующее, состояние и область действия, область действия и область действия Boolean & isCompleted) в Microsoft.AspNetCore. Mvc .Infrastructure.ResourceInvoker.InvokeFilterPipelineAsyn c () --- Конец трассировки стека из предыдущего расположения, в котором было сгенерировано исключение --- в Microsoft.AspNetCore. Mvc .Infrastructure. ResourceInvoker.g__Logged | 17_1 (ResourceInvoker invoker) в Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke (HttpContext httpContext) в Microsoft.AspNetCore.Session.SessionMiddleware.Invoke (контекст HttpContext) в Microsoft.Adle.Session.SessionCore.SessionSec. nvoke (контекст HttpContext) в Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke (контекст HttpContext)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...