Версии
- 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)