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 }; }
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 }; }
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); }
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 }
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; } } } }
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); }