public static RouteInfo RouteRequest(HttpConfiguration config, HttpRequestMessage request) { // create context var controllerContext = new HttpControllerContext(config, Substitute.For<IHttpRouteData>(), request); // get route data var routeData = config.Routes.GetRouteData(request); RemoveOptionalRoutingParameters(routeData.Values); request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData; controllerContext.RouteData = routeData; // get controller type var controllerDescriptor = new DefaultHttpControllerSelector(config).SelectController(request); controllerContext.ControllerDescriptor = controllerDescriptor; // get action name var actionMapping = new ApiControllerActionSelector().SelectAction(controllerContext); return new RouteInfo { Controller = controllerDescriptor.ControllerType, Action = actionMapping.ActionName }; }
public void SelectAction_With_DifferentExecutionContexts() { ApiControllerActionSelector actionSelector = new ApiControllerActionSelector(); HttpControllerContext GetContext = ContextUtil.CreateControllerContext(); HttpControllerDescriptor usersControllerDescriptor = new HttpControllerDescriptor(GetContext.Configuration, "Users", typeof(UsersController)); usersControllerDescriptor.Configuration.Services.Replace(typeof(IHttpActionSelector), actionSelector); GetContext.ControllerDescriptor = usersControllerDescriptor; GetContext.Request = new HttpRequestMessage { Method = HttpMethod.Get }; HttpControllerContext PostContext = ContextUtil.CreateControllerContext(); usersControllerDescriptor.Configuration.Services.Replace(typeof(IHttpActionSelector), actionSelector); PostContext.ControllerDescriptor = usersControllerDescriptor; PostContext.Request = new HttpRequestMessage { Method = HttpMethod.Post }; HttpActionDescriptor getActionDescriptor = actionSelector.SelectAction(GetContext); HttpActionDescriptor postActionDescriptor = actionSelector.SelectAction(PostContext); Assert.Equal("Get", getActionDescriptor.ActionName); Assert.Equal("Post", postActionDescriptor.ActionName); }
public void SelectAction_WithDirectRoutes_RespectsRouteOrder() { // Arrange var actionSelector = new ApiControllerActionSelector(); HttpControllerContext context = ContextUtil.CreateControllerContext(); context.Request = new HttpRequestMessage { Method = HttpMethod.Get }; var controllerDescriptor = new HttpControllerDescriptor(context.Configuration, "MultipleGet", typeof(MultipleGetController)); context.ControllerDescriptor = controllerDescriptor; ReflectedHttpActionDescriptor firstDirectRouteAction = (ReflectedHttpActionDescriptor)actionSelector.GetActionMapping(controllerDescriptor)["GetA"].Single(); HttpRouteData[] subRouteData = new HttpRouteData[2]; subRouteData[0] = new HttpRouteData(new HttpRoute()); subRouteData[1] = new HttpRouteData(new HttpRoute()); context.RouteData.Values.Add(RouteCollectionRoute.SubRouteDataKey, subRouteData); subRouteData[0].Route.DataTokens.Add("actions", new ReflectedHttpActionDescriptor[] { firstDirectRouteAction }); subRouteData[0].Route.DataTokens.Add("order", 1); ReflectedHttpActionDescriptor secondDirectRouteAction = (ReflectedHttpActionDescriptor)actionSelector.GetActionMapping(controllerDescriptor)["GetB"].Single(); subRouteData[1].Route.DataTokens.Add("actions", new ReflectedHttpActionDescriptor[] { secondDirectRouteAction }); subRouteData[1].Route.DataTokens.Add("order", 2); // Act HttpActionDescriptor actionDescriptor = actionSelector.SelectAction(context); // Assert Assert.Same(secondDirectRouteAction, actionDescriptor); }
public void SelectAction_Throws_IfContextIsNull() { ApiControllerActionSelector actionSelector = new ApiControllerActionSelector(); Assert.ThrowsArgumentNull( () => actionSelector.SelectAction(null), "controllerContext"); }
public string GetActionName() { if (controllerContext.ControllerDescriptor == null) GetControllerType(); var actionSelector = new ApiControllerActionSelector(); var descriptor = actionSelector.SelectAction(controllerContext); return descriptor.ActionName; }
public RouteContext(HttpConfiguration config, HttpRequestMessage request) { var routeData = config.Routes.GetRouteData(request); request.SetRouteData(routeData); var controllerSelector = new DefaultHttpControllerSelector(config); var descriptor = controllerSelector.SelectController(request); ControllerType = descriptor.ControllerType; var actionSelector = new ApiControllerActionSelector(); _actionMappings = actionSelector.GetActionMapping(descriptor).SelectMany(x => x).Where(x => x.SupportedHttpMethods.Contains(request.Method)); }
public void SelectAction_RespectsDirectRoutes() { var actionSelector = new ApiControllerActionSelector(); HttpControllerContext context = ContextUtil.CreateControllerContext(); context.Request = new HttpRequestMessage { Method = HttpMethod.Get }; var controllerDescriptor = new HttpControllerDescriptor(context.Configuration, "Users", typeof(UsersController)); context.ControllerDescriptor = controllerDescriptor; ReflectedHttpActionDescriptor directRouteAction = (ReflectedHttpActionDescriptor)actionSelector.GetActionMapping(controllerDescriptor)["Delete"].First(); context.RouteData.Route.DataTokens.Add("actions", new ReflectedHttpActionDescriptor[] { directRouteAction }); HttpActionDescriptor actionDescriptor = actionSelector.SelectAction(context); Assert.Same(directRouteAction, actionDescriptor); }
private HttpActionDescriptor MakeActionDescriptor() { var actionSelector = new ApiControllerActionSelector(); return actionSelector.SelectAction(controllerContext); }
public void HttpActionSelector_Property() { IHttpActionSelector selector = new ApiControllerActionSelector(); HttpControllerDescriptor controllerDescriptor = new HttpControllerDescriptor(); Assert.Reflection.Property<HttpControllerDescriptor, IHttpActionSelector>( instance: controllerDescriptor, propertyGetter: cd => cd.HttpActionSelector, expectedDefaultValue: null, allowNull: false, roundTripTestValue: selector); }
public static RouteInfo RouteRequest(HttpConfiguration config, HttpRequestMessage request) { var httpRouteDataMock = (new Mock<IHttpRouteData>(MockBehavior.Loose)); httpRouteDataMock.DefaultValue = DefaultValue.Mock; // create context var controllerContext = new HttpControllerContext(config, httpRouteDataMock.Object, request); // get route data var routeData = config.Routes.GetRouteData(request); RemoveOptionalRoutingParameters(routeData.Values); request.Properties[HttpPropertyKeys.HttpRouteDataKey] = routeData; controllerContext.RouteData = routeData; // get controller type var controllerDescriptor = new DefaultHttpControllerSelector(config).SelectController(request); controllerContext.ControllerDescriptor = controllerDescriptor; // get action name HttpActionDescriptor actionMapping; try { actionMapping = new ApiControllerActionSelector().SelectAction(controllerContext); } catch (HttpResponseException e) { Console.WriteLine(e.Response); throw; } return new RouteInfo { Controller = controllerDescriptor.ControllerType, Action = actionMapping.ActionName }; }
public void GetActionMapping_IgnoresNonAction() { var actionSelector = new ApiControllerActionSelector(); HttpControllerContext context = ContextUtil.CreateControllerContext(); context.Request = new HttpRequestMessage { Method = HttpMethod.Get }; var controllerDescriptor = new HttpControllerDescriptor(context.Configuration, "NonAction", typeof(NonActionController)); context.ControllerDescriptor = controllerDescriptor; var mapping = actionSelector.GetActionMapping(controllerDescriptor); Assert.False(mapping.Contains("GetA")); Assert.True(mapping.Contains("GetB")); }
public static HttpActionDescriptor SelectAction(HttpControllerContext controllerContext) { ApiControllerActionSelector selector = new ApiControllerActionSelector(); HttpActionDescriptor descriptor = selector.SelectAction(controllerContext); return descriptor; }
private string GetActionName() { var actionSelector = new ApiControllerActionSelector(); var descriptor = actionSelector.SelectAction(routeTest.ControllerContext); return descriptor.ActionName; }