private object EvalFromHttpContext(HttpContext context, ContextDataAttribute attr, ParameterInfo p)
        {
            // 直接从HttpRequest对象中获取数据,根据Attribute中指定的表达式求值。
            string expression  = attr.Expression;
            object requestData = null;

            if (expression.StartsWith("Request."))
            {
                requestData = System.Web.UI.DataBinder.Eval(context.Request, expression.Substring(8));
            }

            else if (expression.StartsWith("HttpRuntime."))
            {
                PropertyInfo property = typeof(HttpRuntime).GetProperty(expression.Substring(12), BindingFlags.Static | BindingFlags.Public);
                if (property == null)
                {
                    throw new ArgumentException(string.Format("参数 {0} 对应的ContextDataAttribute计算表达式 {1} 无效:", p.Name, expression));
                }
                requestData = property.FastGetValue(null);
            }
            else
            {
                requestData = System.Web.UI.DataBinder.Eval(context, expression);
            }


            if (requestData == null)
            {
                return(null);
            }
            else
            {
                if (requestData.GetType().IsCompatible(p.ParameterType))
                {
                    return(requestData);
                }
                else
                {
                    throw new ArgumentException(string.Format("参数 {0} 的申明的类型与HttpRequest对应属性的类型不一致。", p.Name));
                }
            }
        }
Example #2
0
 public void Test_ContextDataAttribute2()
 {
     ContextDataAttribute a = new ContextDataAttribute(string.Empty);
 }
Example #3
0
 public void Test_ContextDataAttribute()
 {
     ContextDataAttribute a = new ContextDataAttribute(null);
 }