public void GetTableControllerNames_ReturnsCorrectControllers() { // Arrange var typeList = new[] { typeof(MoviesController), typeof(ZetaController), typeof(TestTableController), typeof(ApiController), typeof(CustomController), typeof(DerivedMoviesController) }; HttpConfiguration config = new HttpConfiguration(); IAssembliesResolver assemblyResolver = config.Services.GetAssembliesResolver(); Mock<IHttpControllerTypeResolver> typeResolverMock = new Mock<IHttpControllerTypeResolver>(); typeResolverMock.Setup(m => m.GetControllerTypes(assemblyResolver)).Returns(typeList); config.Services.Replace(typeof(IHttpControllerTypeResolver), typeResolverMock.Object); // Act var names = config.GetTableControllerNames(); // Assert Assert.Equal(new[] { "Movies", "TestTable", "DerivedMovies" }, names); }
/// <summary> /// </summary> /// <param name="config">HttpConfiguration</param> public void Initialize(HttpConfiguration config) { HashSet<string> tableControllerNames = config.GetTableControllerNames(); SetRouteConstraint<string> tableControllerConstraint = new SetRouteConstraint<string>(tableControllerNames, matchOnExcluded: false); HttpRouteCollectionExtensions.MapHttpRoute( config.Routes, name: TablesRouteName, routeTemplate: "tables/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, constraints: new { controller = tableControllerConstraint }); }
/// <summary> /// </summary> /// <param name="config">HttpConfiguration</param> public void Initialize(HttpConfiguration config) { HashSet<string> tableControllerNames = config.GetTableControllerNames(); SetRouteConstraint<string> tableControllerConstraint = new SetRouteConstraint<string>(tableControllerNames, matchOnExcluded: false); // register all TableControllers as exclusions so they do not map to /api MobileAppConfiguration mobileAppConfig = config.GetMobileAppConfiguration(); foreach (string controllerName in tableControllerNames) { mobileAppConfig.AddBaseRouteExclusion(controllerName); } HttpRouteCollectionExtensions.MapHttpRoute( config.Routes, name: TablesRouteName, routeTemplate: "tables/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, constraints: new { controller = tableControllerConstraint }); }