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)); } } }
public void Test_ContextDataAttribute2() { ContextDataAttribute a = new ContextDataAttribute(string.Empty); }
public void Test_ContextDataAttribute() { ContextDataAttribute a = new ContextDataAttribute(null); }