Esempio n. 1
0
        //-------------------- COMMON LINK PROPERTY GENERATION METHODS ----------------------

        public ControllerActionLink BuildActionUrlLink <TController>(Expression <Action <TController, TResource> > action)
            where TController : ControllerBase
        {
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action),
                                                "Controller Action selector cannot be null.");
            }

            var resourceLink   = new ControllerActionLink();
            var actionSelector = new ControllerActionRouteSelector <TController, TResource>(resourceLink, action);

            actionSelector.SetRouteInfo();
            return(resourceLink);
        }
Esempio n. 2
0
        // Called for action link containing information based on an expression, specified at compile time, selecting a
        // controller's action method.  The expression also specifies which resource properties should be used for
        // the action's route parameters.
        private Link SetLinkUrl(ResourceContext context, ControllerActionLink resourceLink)
        {
            string controllerName = resourceLink.Controller.Replace("Controller", string.Empty);
            var    routeValues    = GetResourceRouteValues(context, resourceLink);

            var link = new Link
            {
                // Delegate to ASP.NET Core to get the URL corresponding to the route-values.
                Href      = context.UrlHelper.Action(resourceLink.Action, controllerName, routeValues),
                Templated = false,
                Methods   = resourceLink.Methods.ToArray()
            };

            UpdateLinkDescriptorsAndResource(context, resourceLink, link);
            return(link);
        }
Esempio n. 3
0
        // For each controller action argument execute the cached expression on the resource
        // to get the corresponding resource property value for that route parameter.
        private static Dictionary <string, object> GetResourceRouteValues(ResourceContext context, ControllerActionLink resourceLink)
        {
            var modelRouteValues = new Dictionary <string, object>(resourceLink.RouteParameters.Count);

            foreach (RouteParameter routeParam in resourceLink.RouteParameters)
            {
                modelRouteValues[routeParam.ActionParamName] = routeParam.GetPropValue(context.Resource);
            }
            return(modelRouteValues);
        }