Odata FromODataUri с пробелом вызывает ошибку. Как правильно поставить пробел в параметре uri - PullRequest
0 голосов
/ 09 июля 2020

Я хочу вызвать Asp. Net .Core 3.1 API с odata.

Конфигурация

app.UseOData("odata", "odata", GetEdmModel());
app.UseEndpoints(endpoints => { endpoints.Select().Filter().OrderBy().Expand().Count().MaxTop(1000);});

Иногда в нашем пространстве данных встречаются имена или идентификаторы. https://localhost: 44331 / odata / Routings (RoutingId = '3868977_900767% 2FSTD', OperationId = '010% 2F1', AlternativeId = '', SplitId = 0, WorkcenterId = 'L3% 20025')

Для пример, как указано выше WorkcenterId = 'L3 025' и это пространство вызывает ошибку. Первым решением было заменить это место знаком - или другим знаком, но в долгосрочной перспективе это не сработает. Мы также заменяем / на закодированную версию % 2F , и это работает хорошо, но пробел, закодированный как% 20, ничего не меняет.

Вот ошибка

System.InvalidOperationException: Request URI 'https://localhost:44331/odata/Routings(RoutingId='3868977_900767%2FSTD',OperationId='010%2F1',AlternativeId='',SplitId=0,WorkcenterId='L30%2025')' does not contain OData path 
'Routings(RoutingId='3868977_900767%2FSTD',OperationId='010%2F1',AlternativeId='',SplitId=0,WorkcenterId='L30 25')'.
   at Microsoft.AspNet.OData.Routing.ODataPathRouteConstraint.RemoveODataPath(String uriString, String oDataPathString)
   at Microsoft.AspNet.OData.Routing.ODataPathRouteConstraint.GetODataPath(String oDataPathString, String uriPathString, String queryString, Func`1 requestContainerFactory)
   at Microsoft.AspNet.OData.Routing.ODataPathRouteConstraint.Match(HttpContext httpContext, IRouter route, String routeKey, RouteValueDictionary values, RouteDirection routeDirection)
   at Microsoft.AspNetCore.Routing.RouteConstraintMatcher.Match(IDictionary`2 constraints, RouteValueDictionary routeValues, HttpContext httpContext, IRouter route, RouteDirection routeDirection, ILogger logger)
   at Microsoft.AspNetCore.Routing.RouteBase.RouteAsync(RouteContext context)
   at Microsoft.AspNetCore.Routing.RouteCollection.RouteAsync(RouteContext context)
   at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
...