/// <summary> /// 根据一个Action的调用信息(类名与方法名),返回内部表示的调用信息。 /// </summary> /// <param name="pair"></param> /// <returns></returns> public static InvokeInfo GetActionInvokeInfo(ControllerActionPair pair, HttpRequest request) { if (pair == null) { throw new ArgumentNullException("pair"); } InvokeInfo vkInfo = new InvokeInfo(); vkInfo.Controller = GetServiceController(pair.Controller); if (vkInfo.Controller == null) { return(null); } vkInfo.Action = GetServiceAction(vkInfo.Controller.ControllerType, pair.Action, request); if (vkInfo.Action == null) { return(null); } if (vkInfo.Action.MethodInfo.IsStatic == false) { //vkInfo.Instance = Activator.CreateInstance(vkInfo.Controller.ControllerType); vkInfo.Instance = vkInfo.Controller.ControllerType.FastNew(); } return(vkInfo); }
public IHttpHandler GetHandler(HttpContext context, string requestType, string virtualPath, string physicalPath) { // 说明:这里不使用virtualPath变量,因为不同的配置,这个变量的值会不一样。 // 例如:/Ajax/*/*.aspx 和 /Ajax/* // 为了映射HTTP处理器,下面直接使用context.Request.Path string vPath = UrlHelper.GetRealVirtualPath(context, context.Request.Path); // 根据请求路径,定位到要执行的Action ControllerActionPair pair = ParseUrl(context, vPath); if (pair == null) { ExceptionHelper.Throw404Exception(context); } // 获取内部表示的调用信息 InvokeInfo vkInfo = ReflectionHelper.GetActionInvokeInfo(pair, context.Request); if (vkInfo == null) { ExceptionHelper.Throw404Exception(context); } // 创建能够调用Action的HttpHandler return(ActionHandler.CreateHandler(vkInfo)); }