예제 #1
0
        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();
            }
        }
예제 #2
0
 public virtual void RestoreRouteData(RouteContext context, ReusablePipeline pipeline)
 {
     context.RouteData.Values[_options.Value.PipelineNameRouteDataKey] = pipeline.Name.ToLower();
 }