/// <summary> /// 创建一个 <see cref="T:System.Web.Http.Controllers.IHttpController"/> 对象。 /// </summary> /// <returns> /// <see cref="T:System.Web.Http.Controllers.IHttpController"/> 对象。 /// </returns> /// <param name="request">消息请求。</param><param name="controllerDescriptor">HTTP 控制器描述符。</param><param name="controllerType">控制器的类型。</param> public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) { var routeData = request.GetRouteData(); var controllerContext = new HttpControllerContext(_configuration, routeData, request); var areaName = routeData.GetAreaName(); var serviceKey = (areaName + "/" + controllerDescriptor.ControllerName).ToLowerInvariant(); Meta <Lazy <IHttpController> > info; var workContext = controllerContext.GetWorkContext(); if (!TryResolve(workContext, serviceKey, out info)) { return(null); } controllerContext.ControllerDescriptor = new HttpControllerDescriptor(_configuration, controllerDescriptor.ControllerName, controllerType); var controller = info.Value.Value; controllerContext.Controller = controller; return(controller); }
/// <summary> /// 为给定 <see cref="T:System.Net.Http.HttpRequestMessage"/> 选择 <see cref="T:System.Web.Http.Controllers.HttpControllerDescriptor"/>。 /// </summary> /// <returns> /// 给定 <see cref="T:System.Net.Http.HttpRequestMessage"/> 的 <see cref="T:System.Web.Http.Controllers.HttpControllerDescriptor"/> 实例。 /// </returns> /// <param name="request">HTTP 请求消息。</param> public override HttpControllerDescriptor SelectController(HttpRequestMessage request) { var routeData = request.GetRouteData(); var areaName = routeData.GetAreaName(); var controllerName = GetControllerName(request); //服务名称模式匹配的识别方法 var serviceKey = (areaName + "/" + controllerName).ToLowerInvariant(); var controllerContext = new HttpControllerContext(_configuration, routeData, request); Meta <Lazy <IHttpController> > info; var workContext = controllerContext.GetWorkContext(); if (!TryResolve(workContext, serviceKey, out info)) { return(null); } var type = (Type)info.Metadata["ControllerType"]; return (new HttpControllerDescriptor(_configuration, controllerName, type)); }
public override HttpControllerDescriptor SelectController(HttpRequestMessage request) { var routeData = request.GetRouteData(); // Determine the area name for the request, and fall back to stock Boying controllers var areaName = routeData.GetAreaName(); var controllerName = base.GetControllerName(request); // Service name pattern matches the identification strategy var serviceKey = (areaName + "/" + controllerName).ToLowerInvariant(); var controllerContext = new HttpControllerContext(_configuration, routeData, request); // Now that the request container is known - try to resolve the controller information Meta <Lazy <IHttpController> > info; var workContext = controllerContext.GetWorkContext(); if (TryResolve(workContext, serviceKey, out info)) { var type = (Type)info.Metadata["ControllerType"]; return (new HttpControllerDescriptor(_configuration, controllerName, type)); } return(null); }
public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) { var routeData = request.GetRouteData(); HttpControllerContext controllerContext = new HttpControllerContext(_configuration, routeData, request); // Determine the area name for the request, and fall back to stock Coevery controllers var areaName = routeData.GetAreaName(); // Service name pattern matches the identification strategy var serviceKey = (areaName + "/" + controllerDescriptor.ControllerName).ToLowerInvariant(); // Now that the request container is known - try to resolve the controller information Meta <Lazy <IHttpController> > info; var workContext = controllerContext.GetWorkContext(); if (TryResolve(workContext, serviceKey, out info)) { controllerContext.ControllerDescriptor = new HttpControllerDescriptor(_configuration, controllerDescriptor.ControllerName, controllerType); var controller = info.Value.Value; controllerContext.Controller = controller; return(controller); } return(null); }