public static WebId GetWebId(this IProvideUrl url,
                                     Type controllerType,
                                     string urnNamespace,
                                     string routeName = "DefaultApi")
        {
            var controllerName =
                controllerType.Name.TrimEnd("Controller",
                                            (trimmedName) => trimmedName, (originalName) => originalName);

            if (controllerType.ContainsCustomAttribute <FunctionViewControllerAttribute>())
            {
                var fvcAttr = controllerType.GetCustomAttribute <FunctionViewControllerAttribute>();
                if (fvcAttr.Route.HasBlackSpace())
                {
                    controllerName = fvcAttr.Route;
                }
            }

            var location = url.Link(routeName, controllerName);

            return(new WebId
            {
                Key = string.Empty,
                UUID = Guid.Empty,
                URN = controllerType.GetUrn(urnNamespace),
                Source = location,
            });
        }
        public static Uri GetLocation <TController>(this IProvideUrl url,
                                                    string action,
                                                    string routeName = "DefaultApi")
        {
            var controllerName =
                typeof(TController).Name.TrimEnd("Controller",
                                                 (trimmedName) => trimmedName, (originalName) => originalName);
            var location = url.Link(routeName, controllerName: controllerName, action: action);

            return(location);
        }
        public static Uri GetLocation(this IProvideUrl url, Type controllerType, Guid id,
                                      string routeName = "DefaultApi")
        {
            if (String.IsNullOrWhiteSpace(routeName))
            {
                routeName = "DefaultApi";
            }

            var controllerName =
                controllerType.Name.TrimEnd("Controller",
                                            (trimmedName) => trimmedName, (originalName) => originalName);
            var location = url.Link(routeName, controllerName: controllerName, id: id.ToString());

            return(location);
        }
        public static Uri GetLocation(this IProvideUrl url, Type controllerType,
                                      string routeName = default)
        {
            if (routeName.IsNullOrWhiteSpace())
            {
                routeName = controllerType.GetCustomAttribute <FunctionViewControllerAttribute, string>(
                    (attr) => attr.Namespace,
                    () => "api");
            }

            var controllerName = controllerType.GetCustomAttribute <FunctionViewControllerAttribute, string>(
                (attr) => attr.Route,
                () => controllerType.Name
                .TrimEnd("Controller",
                         (trimmedName) => trimmedName,
                         (originalName) => originalName)
                .ToLower());

            var location = url.Link(routeName, controllerName: controllerName);

            return(location);
        }