public virtual void ChangeRouteDataToLocatedAction(RouteContext context, ReusablePipeline pipeline) { var uri = context.HttpContext.Request.Path.Value.Trim('/'); var controllerName = context.RouteData.Values["controller"].ToString(); var targetPipeline = _pipelineActions.GetOrAdd(pipeline, t => new ConcurrentDictionary <string, ConcurrentDictionary <string, IPipeline> >(StringComparer.OrdinalIgnoreCase)) .GetOrAdd(controllerName, t => new ConcurrentDictionary <string, IPipeline>(StringComparer.OrdinalIgnoreCase)) .GetOrAdd(uri, t1 => { var pipelinePath = _pipelineDecisionTree.GetPipelinePath(pipeline); foreach (var p in pipelinePath) { var fullControllerNames = p.GetControllerFullnames(context); foreach (var fullControllerName in fullControllerNames) { if (_controllerActionUris.TryGetValue(fullControllerName, out var uris)) { if (uris.Contains(uri, StringComparer.OrdinalIgnoreCase)) { return(p); } } } } return(null); }); if (string.IsNullOrEmpty(targetPipeline?.Name)) { context.RouteData.Values.Remove(_options.Value.PipelineNameRouteDataKey); } else { context.RouteData.Values[_options.Value.PipelineNameRouteDataKey] = targetPipeline.Name.ToLower(); } }
public virtual void RestoreRouteData(RouteContext context, ReusablePipeline pipeline) { context.RouteData.Values[_options.Value.PipelineNameRouteDataKey] = pipeline.Name.ToLower(); }