예제 #1
1
 public override void Execute(RequestContext context)
 {
     JavaScriptSerializer jss = new JavaScriptSerializer();
     var json = jss.Serialize(paraObj);
     context.HttpContext.Response.Write(json);
     context.HttpContext.Response.ContentType = "application/json";
 }
예제 #2
0
 public override void Execute(RequestContext context)
 {
     var velocity = new VelocityHelper(string.Format("~/Views/{0}/", context.RouteData["controller"].ToString()));
     // 绑定实体model
     velocity.Put("model", this.model);
     // 显示具体html
     velocity.Display(string.Format("{0}.html", context.RouteData["action"].ToString()));
     // 设置响应头类型
     context.HttpContext.Response.ContentType = "text/html";
 }
예제 #3
0
        public virtual ActionResult Execute(RequestContext context)
        {
            this.Context = context.HttpContext;
            this.RouteData = context.RouteData;
            // 获取ActionName
            var actionName = RouteData["action"].ToString();
            if (string.IsNullOrEmpty(actionName))
            {
                //actionName = RouteData["defaults"];
            }
            // 先找到当前类中的所有方法
            var methods = this.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
            MethodInfo method = null;
            foreach (var item in methods)
            {
                if (item.Name.Equals(actionName, StringComparison.InvariantCultureIgnoreCase))
                {
                    method = item;
                    break;
                }
            }
            // 如果没有找到指定的action方法
            if (method == null)
            {
                throw new HttpException(404, "Not Found");
            }

            List<object> values = new List<object>();
            var parameters = method.GetParameters();

            foreach (var parameter in parameters)
            {
                var name = parameter.Name;
                var type = parameter.ParameterType;
                // 参数来源:1.Form表单    2.QueryString   3.RouteData
                var value = Context.Request[name];
                if (string.IsNullOrEmpty(value))
                {
                    value = RouteData.ContainsKey(name) ? RouteData[name].ToString() : null;
                }

                if (!string.IsNullOrEmpty(value))
                {
                    // 值类型转换
                    values.Add(Convert.ChangeType(value, type));
                }
                else
                {
                    values.Add(null);
                }
            }

            ActionResult result = method.Invoke(this, values.ToArray()) as ActionResult;
            return result;
        }
예제 #4
0
 public void ProcessRequest(HttpContext context)
 {
     var controllerName = routeData["controller"].ToString();
     // 借助控制器工厂创建具体控制器实例
     IController controller = DefaultControllerFactory.CreateController(controllerName);
     // 确保有找到一个Controller处理请求
     if (controller == null)
     {
         // 404 Not Found!
         throw new HttpException(404, "Not Found");
     }
     // 封装请求
     var requestContext = new RequestContext { HttpContext = context, RouteData = routeData };
     // 开始执行
     var result = controller.Execute(requestContext);
     result.Execute(requestContext);
 }
예제 #5
0
 public abstract void Execute(RequestContext context);
예제 #6
0
 public override void Execute(RequestContext context)
 {
     context.HttpContext.Response.Write(content);
     context.HttpContext.Response.ContentType = contentType;
 }