Exemplo n.º 1
0
        /// <summary>
        /// 解析表达式树
        /// </summary>
        public static ActionIdentity AnalysisExpression <T>(Expression <Func <T, object> > actionExpression)
        {
            if (actionExpression == null)
            {
                return(null);
            }

            //使用一元表达式的解析方法
            //UnaryExpression operation = (UnaryExpression)actionExpression.Body;
            //MethodCallExpression methodCall = (MethodCallExpression)operation.Operand;
            //ConstantExpression methodConstant = (ConstantExpression)methodCall.Arguments[2];

            MethodCallExpression methodCall = (MethodCallExpression)actionExpression.Body;
            MethodInfo           methodInfo = methodCall.Method;

            string _controllerName = methodInfo.DeclaringType.Name;

            _controllerName = _controllerName.Substring(0, _controllerName.Length - "controller".Length);
            string _actionName         = methodInfo.Name;
            string _controllerTypeName = methodInfo.DeclaringType.FullName;
            string _functionKey        = _controllerTypeName + "." + _actionName;

            ActionIdentity identity = new ActionIdentity()
            {
                ControllerName     = _controllerName,
                ActionName         = _actionName,
                FunctionKey        = _functionKey,
                ControllerTypeName = _controllerTypeName,
                AreaName           = string.Empty
            };
            const string areasNamespace      = ".Areas.";
            const string controllerNamespace = ".Controllers.";

            if (_controllerTypeName.Contains(areasNamespace))
            {
                int areaPosition = _controllerTypeName.IndexOf(areasNamespace) + areasNamespace.Length;
                identity.AreaName =
                    _controllerTypeName.Substring(areaPosition,
                                                  _controllerTypeName.IndexOf(controllerNamespace) - areaPosition);
            }
            return(identity);
        }
Exemplo n.º 2
0
 /// <summary>
 /// 解析表达式树
 /// </summary>
 private void AnalysisExpression()
 {
     _actionIdentity = ActionExpressionParser.AnalysisExpression(ActionExpression);
 }