/// <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));
    }
예제 #2
0
        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);
    }