/// <summary> /// Generates a fully qualified URL to an action method /// </summary> public static string Action <TController>(this UrlHelper urlHelper, Expression <Action <TController> > action) where TController : Controller { RouteValueDictionary rvd = InternalExpressionHelper.GetRouteValues(action); return(urlHelper.Action(null, null, rvd)); }
private static Expression ConvertForBinaryExpression <TTo>(BinaryExpression expression) { if (expression == null) { return(null); } var expressionDisassembler = new ExpressionDisassembler(_mapper); var expressionAssembler = new ExpressionAssembler(_mapper); var expressionHelper = new InternalExpressionHelper(_mapper); var list1 = new List <ExpressionType>(); var parameter = Expression.Parameter(typeof(TTo), "x"); var list2 = expressionDisassembler.DisassembleBinaryExpression(expression, list1).ToList(); if (list2.Count() == 1) { return(Expression.Lambda <Func <TTo, bool> >(expressionAssembler.AssemblySimpleBinaryExpression <TTo>(list2[0], parameter) .MaybeAs <BinaryExpression>() .GetOrDefault(null), parameter)); } else { List <Expression> listConvertedExpressions = expressionHelper.CollectListOfExpressions <TTo>(list2, parameter).ToList(); if (list1.Count == 0) { list1.Add(list2.Last().ExpressionWithMethodModel.ValueOfExpressionType); } return(Expression.Lambda <Func <TTo, bool> >(expressionAssembler.AssemblyExpression(listConvertedExpressions, list1), parameter)); } }
public static string HttpRouteUrl <TController>(this UrlHelper urlHelper, Expression <Action <TController> > action) where TController : System.Web.Http.Controllers.IHttpController { var routeValues = InternalExpressionHelper.GetRouteValues(action); var httpRouteKey = System.Web.Http.Routing.HttpRoute.HttpRouteKey; if (!routeValues.ContainsKey(httpRouteKey)) { routeValues.Add(httpRouteKey, true); } var url = string.Empty; if (routeValues.ContainsKey(HttpAttributeRouteWebApiKey)) { var routeName = routeValues[HttpAttributeRouteWebApiKey] as string; routeValues.Remove(HttpAttributeRouteWebApiKey); routeValues.Remove("controller"); routeValues.Remove("action"); url = urlHelper.HttpRouteUrl(routeName, routeValues); } else { var path = resolvePath <TController>(routeValues); var root = getRootPath(urlHelper); url = root + path; } return(url); }