Exemple #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="mvcOptions"></param>
 /// <param name="contentResultExecutor"></param>
 /// <param name="controllerActionInvokerCache"></param>
 /// <param name="actionInvokerFactory"></param>
 /// <param name="actionInvokeInfoCache"></param>
 public RouteTesterActionInvokerFactory(
     IOptions <MvcOptions> mvcOptions,
     ContentResultExecutor contentResultExecutor,
     ControllerActionInvokerCache controllerActionInvokerCache,
     ActionInvokerFactory actionInvokerFactory,
     ActualActionInvokeInfoCache actionInvokeInfoCache)
 {
     _mvcOptions                   = mvcOptions;
     _contentResultExecutor        = contentResultExecutor;
     _controllerActionInvokerCache = controllerActionInvokerCache;
     _actionInvokerFactory         = actionInvokerFactory;
     _actionInvokeInfoCache        = actionInvokeInfoCache;
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="actionContext"></param>
 /// <param name="valueProviderFactories"></param>
 /// <param name="contentResultExecutor"></param>
 /// <param name="controllerActionInvokerCache"></param>
 /// <param name="actionInvokerFactory"></param>
 /// <param name="actionInvokeInfoCache"></param>
 public RouteTesterActionInvoker(
     ActionContext actionContext,
     IList <IValueProviderFactory> valueProviderFactories,
     ContentResultExecutor contentResultExecutor,
     ControllerActionInvokerCache controllerActionInvokerCache,
     ActionInvokerFactory actionInvokerFactory,
     ActualActionInvokeInfoCache actionInvokeInfoCache)
 {
     _actionContext                = actionContext;
     _valueProviderFactories       = valueProviderFactories;
     _contentResultExecutor        = contentResultExecutor;
     _controllerActionInvokerCache = controllerActionInvokerCache;
     _actionInvokerFactory         = actionInvokerFactory;
     _actionInvokeInfoCache        = actionInvokeInfoCache;
 }
Exemple #3
0
        public static HttpHandler to_api_controller <TController>(string prefix = "", RouteValueDictionary defaultRouteValues = null)
        {
            return(HttpHandler.FromFunc(async ctx =>
            {
                var currentPath = prefix + GetPath(ctx);

                // REVIEW: cache all this?
                var appModelProvider = ctx.RequestServices.GetServices <IApplicationModelProvider>().OfType <DefaultApplicationModelProvider>().Single();
                ApplicationModelProviderContext appModelProviderCtx = new ApplicationModelProviderContext(new[] { typeof(TController).GetTypeInfo() });
                appModelProvider.OnProvidersExecuting(appModelProviderCtx);

                var descriptors = ControllerActionDescriptorBuilder.Build(appModelProviderCtx.Result);
                var matchedDescriptors = new List <ActionDescriptor>();
                var parsedValues = new Dictionary <ActionDescriptor, RouteValueDictionary>();

                foreach (var d in descriptors)
                {
                    var templateMatcher = new TemplateMatcher(TemplateParser.Parse(d.AttributeRouteInfo.Template), defaultRouteValues ?? new RouteValueDictionary());
                    var parsedRouteValues = new RouteValueDictionary();
                    if (templateMatcher.TryMatch(new PathString(currentPath), parsedRouteValues))
                    {
                        matchedDescriptors.Add(d);
                        parsedValues[d] = parsedRouteValues;
                    }
                }

                var actionSelector = ctx.RequestServices.GetRequiredService <IActionSelector>();
                var best = actionSelector.SelectBestCandidate(new RouteContext(ctx), matchedDescriptors);

                var routeCtx = new RouteContext(ctx);
                routeCtx.RouteData.Values.Clear();
                foreach (var kv in parsedValues[best])
                {
                    routeCtx.RouteData.Values.Add(kv.Key, kv.Value);
                }

                var actx = new ActionContext(ctx, routeCtx.RouteData, best);
                var actionInvokerProvider = ctx.RequestServices.GetServices <IActionInvokerProvider>().OfType <ControllerActionInvokerProvider>().Single();
                var fac = new ActionInvokerFactory(new[] { actionInvokerProvider });
                IActionInvoker invoker = fac.CreateInvoker(actx);
                await invoker.InvokeAsync();
                return true;
            }));
        }