public IEnumerable <IHttpRoute> Build(RouteBuilderInfo builderHelper)
        {
            var route = builderHelper.CreateRoute(GenerateRouteTemplate(builderHelper));

            builderHelper.ActionCall.SetParamsDefaults(route.Defaults);
            foreach (var arg in builderHelper.ActionCall.GetArgumentNames())
            {
                IHttpRouteConstraint constraint = GetConstraint(builderHelper, arg);
                if (constraint != null)
                {
                    route.Constraints[arg] = constraint;
                }
            }

            MethodInfo action = builderHelper.ActionCall.Method;

            if (action.Name.StartsWith("Get") || action.Name.StartsWith("Find") ||
                action.GetCustomAttribute <HttpGetAttribute>() != null)
            {
                route.ConstrainToGet();
            }

            if (action.Name.StartsWith("Post") || action.GetCustomAttribute <HttpPostAttribute>() != null)
            {
                route.ConstrainToPost();
            }
            return(new[] { route });
        }
 public HandlerRouteConventionTests()
 {
     _sut = new HandlerRouteConvention();
     _ac = new RouteBuilderInfo(new ActionCall(typeof(HomeController).GetMethod("Get")),new RoutingConventions());
     _route = _sut.Build(_ac).First();
     
 }
        public virtual IEnumerable <Route> Build(RouteBuilderInfo info)
#endif
        {
            var modelInfo = new ModelInfo(info.ActionCall, CanBeRouteParameter);
            var route     = info.CreateRoute(BuildUrlTemplate(modelInfo));

            if (!IsCommand(info.ActionCall))
            {
                modelInfo.Members.ForEach(m =>
                {
                    SetDefaultValue(m, modelInfo.Instance, route.Defaults);
                    SetConstraint(m, info, route.Constraints);
                });
            }

            if (!IsCommand(info.ActionCall))
            {
                route.ConstrainToGet();
            }

            if (info.ActionCall.IsPost())
            {
                route.ConstrainToPost();
            }

            SetConstraints(info, route.Constraints);

            return(new[] { route });
        }
        public IEnumerable<IHttpRoute> Build(RouteBuilderInfo builderHelper)
        {
            var route = builderHelper.CreateRoute(GenerateRouteTemplate(builderHelper));

            builderHelper.ActionCall.SetParamsDefaults(route.Defaults);
            foreach (var arg in builderHelper.ActionCall.GetArgumentNames())
            {
                IHttpRouteConstraint constraint = GetConstraint(builderHelper, arg);
                if (constraint != null)
                {
                    route.Constraints[arg] = constraint;
                }
            }

            MethodInfo action = builderHelper.ActionCall.Method;
            if (action.Name.StartsWith("Get") || action.Name.StartsWith("Find") ||
                action.GetCustomAttribute<HttpGetAttribute>() != null)
            {
                route.ConstrainToGet();
            }

            if (action.Name.StartsWith("Post") || action.GetCustomAttribute<HttpPostAttribute>() != null)
            {
                route.ConstrainToPost();
            }
            return new[] { route };
        }
Beispiel #5
0
        public IEnumerable <Route> Build(RouteBuilderInfo info)
        {
            var sb   = new StringBuilder();
            var name = info.ActionCall.Controller.ControllerNameWithoutSuffix();

            sb.Append(name.ToLowerInvariant());

            var defaults    = info.CreateDefaults();
            var constraints = new RouteValueDictionary();
            var args        = new List <string>();

            if (info.ActionCall.Method.Name.StartsWith("get", StringComparison.OrdinalIgnoreCase))
            {
                foreach (var param in info.ActionCall.Method.GetParameters().Where(d => !d.ParameterType.IsUserDefinedClass()).Select(d => d.Name))
                {
                    sb.Append("/{").Append(param).Append("}");
                    args.Add(param);
                }
                info.ActionCall.SetParamsDefaults(defaults);
            }

            ApplyConstraints(args, info, constraints);

            return(new[] { new Route(sb.ToString(), defaults, constraints, info.Settings.CreateHandler()) });
        }
		 public void Modify(Route route, RouteBuilderInfo info)
#endif
        {
            if (Modifier != null)
            {
                Modifier(route, info);
            }
        }
 public IEnumerable<Route> Build(RouteBuilderInfo info)
 {
     var url = info.ActionCall.Controller.ToWebsiteRelativePath(info.ActionCall.Controller.Assembly).ToLower();
     url = url.TrimStart('~', '/');
     var route = info.CreateRoute(url);
     route.DataTokens["Namespaces"] = new[] { info.ActionCall.Controller.Namespace };
     return new[] { route };
 }
Beispiel #8
0
        public void Modify(Route route, RouteBuilderInfo info)
#endif
        {
            if (Modifier != null)
            {
                Modifier(route, info);
            }
        }
 private static IHttpRouteConstraint GetConstraint(RouteBuilderInfo builderHelper,string arg)
 {
     var argument = builderHelper.ActionCall.GetActionArgument(arg);
     if (argument!=null)
     {
         return builderHelper.GetConstraint(argument.ParameterType);
     }
     return null;
 }
        private static IHttpRouteConstraint GetConstraint(RouteBuilderInfo builderHelper, string arg)
        {
            var argument = builderHelper.ActionCall.GetActionArgument(arg);

            if (argument != null)
            {
                return(builderHelper.GetConstraint(argument.ParameterType));
            }
            return(null);
        }
Beispiel #11
0
        public IEnumerable <Route> Build(RouteBuilderInfo info)
        {
            var url = info.ActionCall.Controller.ToWebsiteRelativePath(info.ActionCall.Controller.Assembly).ToLower();

            url = url.TrimStart('~', '/');
            var route = info.CreateRoute(url);

            route.DataTokens["Namespaces"] = new[] { info.ActionCall.Controller.Namespace };
            return(new[] { route });
        }
		public IEnumerable<Route> Build(RouteBuilderInfo info)
#endif
        {
            if (Builder != null)
            {
                return Builder(info);
            }
#if WEBAPI
            return new IHttpRoute[0];
#else
		return new Route[0];
#endif
        }
Beispiel #13
0
        public IEnumerable <Route> Build(RouteBuilderInfo info)
#endif
        {
            if (Builder != null)
            {
                return(Builder(info));
            }
#if WEBAPI
            return(new IHttpRoute[0]);
#else
            return(new Route[0]);
#endif
        }
        string GenerateRouteTemplate(RouteBuilderInfo builder)
        {
            var sb=new StringBuilder();
            sb.Append(builder.ActionCall.Controller.ControllerNameWithoutSuffix().ToLower())
                .Append("/")
                .Append(FormatActionName(builder.ActionCall.Method.Name))
                ;

            foreach (var arg in builder.ActionCall.GetArgumentNames())
            {
                sb.Append("/");
                sb.Append("{" + arg + "}");
            }
            return sb.ToString();
        }
        string GenerateRouteTemplate(RouteBuilderInfo builder)
        {
            var sb = new StringBuilder();

            sb.Append(builder.ActionCall.Controller.ControllerNameWithoutSuffix().ToLower())
            .Append("/")
            .Append(FormatActionName(builder.ActionCall.Method.Name))
            ;

            foreach (var arg in builder.ActionCall.GetArgumentNames())
            {
                sb.Append("/");
                sb.Append("{" + arg + "}");
            }
            return(sb.ToString());
        }
            Route MakeDefaultRoute()
            {
                var info  = new RouteBuilderInfo(_action, _parent);
                var route = info.CreateRoute(DefaultRouteUrl);

                if (_isModelInput)
                {
                    FillModelParamValues(route.Defaults);
                }
                else
                {
                    FillParamValues(route.Defaults);
                }
                route.ConstrainToGet();
                return(route);
            }
        public IEnumerable <Route> BuildRoutes()
#endif
        {
#if WEBAPI
            List <IHttpRoute> routeCollection = new List <IHttpRoute>();
#else
            List <Route> routeCollection = new List <Route>();
#endif
            foreach (var action in Actions)
            {
                var helper  = new RouteBuilderInfo(action, this);
                var builder = _builders.FirstOrDefault(d => d.Match(action));
#if WEBAPI
                IEnumerable <IHttpRoute> routes;
#else
                IEnumerable <Route> routes;
#endif
                if (builder != null)
                {
                    routes = builder.Build(helper);
                }
                else
                {
                    routes = _defaultBuilder(helper);
                }

                foreach (var modifier in _modifiers.Where(d => d.Match(action)))
                {
                    foreach (var route in routes)
                    {
                        modifier.Modify(route, helper);
                    }
                }


                routeCollection.AddRange(routes);
            }
#if !WEBAPI
            if (_home != null)
            {
                routeCollection.Add(_home);
            }
#endif
            return(routeCollection);
        }
 static void ApplyConstraints(IEnumerable<string> args,RouteBuilderInfo info,IDictionary<string,object> constraints)
 {
     var httpMethod = info.ActionCall.Method.Name.StartsWith("post",
                                                   StringComparison.OrdinalIgnoreCase)
                         ? "POST"
                         : "GET";
     constraints["httpMethod"] = new HttpMethodConstraint(httpMethod);
     foreach (var arg in args)
     {
         var param = info.ActionCall.GetActionArgument(arg);
         if (param != null)
         {
             var constraint = info.GetConstraint(param.ParameterType);
             if (constraint != null)
             {
                 constraints[arg] = constraint;
             }
         }
     }
 }
Beispiel #19
0
        static void ApplyConstraints(IEnumerable <string> args, RouteBuilderInfo info, IDictionary <string, object> constraints)
        {
            var httpMethod = info.ActionCall.Method.Name.StartsWith("post",
                                                                    StringComparison.OrdinalIgnoreCase)
                                ? "POST"
                                : "GET";

            constraints["httpMethod"] = new HttpMethodConstraint(httpMethod);
            foreach (var arg in args)
            {
                var param = info.ActionCall.GetActionArgument(arg);
                if (param != null)
                {
                    var constraint = info.GetConstraint(param.ParameterType);
                    if (constraint != null)
                    {
                        constraints[arg] = constraint;
                    }
                }
            }
        }
        public IEnumerable<Route> Build(RouteBuilderInfo info)
        {
            
            var sb = new StringBuilder();
            var name = info.ActionCall.Controller.ControllerNameWithoutSuffix();
            sb.Append(name.ToLowerInvariant());
            
            var defaults = info.CreateDefaults();
            var constraints = new RouteValueDictionary();
            var args = new List<string>();
            if (info.ActionCall.Method.Name.StartsWith("get", StringComparison.OrdinalIgnoreCase))
            {
                foreach (var param in info.ActionCall.Method.GetParameters().Where(d=>!d.ParameterType.IsUserDefinedClass()).Select(d=>d.Name))
                {
                    sb.Append("/{").Append(param).Append("}");
                    args.Add(param);
                }
                info.ActionCall.SetParamsDefaults(defaults);
            }

            ApplyConstraints(args,info,constraints);
           
            return new[]{ new Route(sb.ToString(),defaults,constraints,info.Settings.CreateHandler())};
        }
 public virtual IEnumerable<IHttpRoute> Build(RouteBuilderInfo info)
 /// <summary>
 /// Sets route constraints based on action/controller type
 /// </summary>
 /// <param name="info"></param>
 /// <param name="data"></param>
 protected void SetConstraints(RouteBuilderInfo info, IDictionary<string, object> data)
 {
   
 }
 /// <summary>
 /// Sets route constraints based on action/controller type
 /// </summary>
 /// <param name="info"></param>
 /// <param name="data"></param>
 protected void SetConstraints(RouteBuilderInfo info, IDictionary <string, object> data)
 {
 }
 public virtual IEnumerable <IHttpRoute> Build(RouteBuilderInfo info)
        /// <summary>
        /// Sets constraint for the specified model member (route parameters)
        /// </summary>
        /// <param name="info"></param>
        /// <param name="builder"></param>
        /// <param name="data"></param>
        protected virtual void SetConstraint(MemberInfo info, RouteBuilderInfo builder, IDictionary <string, object> data)
        {
            var constraint = builder.GetConstraint(info.DeclaringType);

            constraint.IfNotNullDo(d => data[info.Name.ToLower()] = d);
        }
 public void Modify(IHttpRoute route, RouteBuilderInfo info)
		 public virtual IEnumerable<Route> Build(RouteBuilderInfo info)
#endif
        {
           var modelInfo=new ModelInfo(info.ActionCall,CanBeRouteParameter);
            var route = info.CreateRoute(BuildUrlTemplate(modelInfo));

            if (!IsCommand(info.ActionCall))
            {
                modelInfo.Members.ForEach(m =>
                {
                    SetDefaultValue(m, modelInfo.Instance, route.Defaults);
                    SetConstraint(m, info, route.Constraints);
                });
            }

            if (!IsCommand(info.ActionCall)) route.ConstrainToGet();
            
            if (info.ActionCall.IsPost()) route.ConstrainToPost();

            SetConstraints(info,route.Constraints);
                
            return new[] { route };
        }
 public HandlerRouteConventionTests()
 {
     _sut   = new HandlerRouteConvention();
     _ac    = new RouteBuilderInfo(new ActionCall(typeof(HomeController).GetMethod("Get")), new RoutingConventions());
     _route = _sut.Build(_ac).First();
 }
 /// <summary>
 /// Sets constraint for the specified model member (route parameters)
 /// </summary>
 /// <param name="info"></param>
 /// <param name="builder"></param>
 /// <param name="data"></param>
 protected virtual void SetConstraint(MemberInfo info, RouteBuilderInfo builder, IDictionary<string, object> data)
 {
     var constraint = builder.GetConstraint(info.DeclaringType);
     constraint.IfNotNullDo(d => data[info.Name.ToLower()]=d);            
 }
Beispiel #30
0
 public void Modify(IHttpRoute route, RouteBuilderInfo info)