void UpdateBindingInfo( ControllerActionDescriptor action, ApiVersion apiVersion, ODataRouteMapping mapping, ICollection <ODataAttributeRouteInfo> routeInfos) { var routeContext = new ODataRouteBuilderContext(mapping, apiVersion, action, Options); if (routeContext.IsRouteExcluded) { return; } var routeBuilder = new ODataRouteBuilder(routeContext); var parameterContext = new ActionParameterContext(routeBuilder, routeContext); if (!parameterContext.IsSupported) { return; } for (var i = 0; i < action.Parameters.Count; i++) { UpdateBindingInfo(parameterContext, action.Parameters[i]); } var templates = parameterContext.Templates; for (var i = 0; i < templates.Count; i++) { var template = templates[i]; var routeInfo = new ODataAttributeRouteInfo() { Template = template.RouteTemplate, ODataTemplate = template.PathTemplate, RouteName = mapping.RouteName, RoutePrefix = mapping.RoutePrefix, }; routeInfos.Add(routeInfo); } if (routeContext.IsOperation) { EnsureOperationHttpMethod(action, routeContext.Operation !); } }
void UpdateBindingInfo(ControllerActionDescriptor action, ODataRouteMapping mapping, ICollection <ODataAttributeRouteInfo> routeInfos) { var routeContext = new ODataRouteBuilderContext(mapping, action, Options); var routeBuilder = new ODataRouteBuilder(routeContext); var parameterContext = new ActionParameterContext(routeBuilder, routeContext); for (var i = 0; i < action.Parameters.Count; i++) { UpdateBindingInfo(parameterContext, action.Parameters[i]); } var routeInfo = new ODataAttributeRouteInfo() { Template = routeBuilder.BuildPath(includePrefix: true), ODataTemplate = parameterContext.PathTemplate, }; routeInfos.Add(routeInfo); }
static void UpdateBindingInfo( ControllerActionDescriptor action, ODataRouteMapping mapping, ICollection <ODataAttributeRouteInfo> routeInfos) { string template; string path; switch (action.ActionName) { case nameof(MetadataController.GetMetadata): case nameof(VersionedMetadataController.GetOptions): path = "$metadata"; if (string.IsNullOrEmpty(mapping.RoutePrefix)) { template = path; } else { template = mapping.RoutePrefix + '/' + path; } break; default: path = "/"; template = string.IsNullOrEmpty(mapping.RoutePrefix) ? path : mapping.RoutePrefix; break; } var handler = mapping.Services.GetRequiredService <IODataPathTemplateHandler>(); var routeInfo = new ODataAttributeRouteInfo() { Name = mapping.RouteName, Template = template, ODataTemplate = handler.ParseTemplate(path, mapping.Services), RoutePrefix = mapping.RoutePrefix, }; routeInfos.Add(routeInfo); }
void UpdateBindingInfo(ControllerActionDescriptor action, ODataRouteMapping mapping, ICollection <ODataAttributeRouteInfo> routeInfos) { Contract.Requires(action != null); Contract.Requires(mapping != null); Contract.Requires(routeInfos != null); var routeContext = new ODataRouteBuilderContext(mapping, action, Options); var routeBuilder = new ODataRouteBuilder(routeContext); var parameterContext = new ActionParameterContext(routeBuilder, routeContext); foreach (var parameter in action.Parameters) { UpdateBindingInfo(parameterContext, parameter); } var routeInfo = new ODataAttributeRouteInfo() { Template = routeBuilder.BuildPath(includePrefix: true), ODataTemplate = parameterContext.PathTemplate, }; routeInfos.Add(routeInfo); }