public void Configure(IAppBuilder appBuilder) { // Configure Web API for self-host. var config = new HttpConfiguration(); var services = config.Services; if (services == null) { throw new InvalidOperationException(); } Configuration.Cors.Select(configuration => configuration.AsCorsOptions()) ?.ToList() .ForEach(corsOptions => appBuilder.UseCors(corsOptions)); var constraintResolver = new DefaultInlineConstraintResolver(); constraintResolver.ConstraintMap?.Add(nameof(AdminActions), typeof(AdminActionsConstraint)); constraintResolver.ConstraintMap?.Add(nameof(LookupKey), typeof(LookupKey.Constraint)); constraintResolver.ConstraintMap?.Add(nameof(ChatMessage), typeof(ChatMessage.Constraint)); // Map routes config.MapHttpAttributeRoutes(constraintResolver, new VersionedRouteProvider()); config.DependencyResolver = new IntersectServiceDependencyResolver(Configuration, config); // Make JSON the default response type for browsers config.Formatters?.JsonFormatter?.Map("accept", "text/html", "application/json"); if (Configuration.DebugMode) { appBuilder.SetLoggerFactory(new IntersectLoggerFactory()); } if (Configuration.RequestLogging) { appBuilder.Use <IntersectRequestLoggingMiddleware>(Configuration.RequestLogLevel); } appBuilder.Use <IntersectThrottlingMiddleware>( Configuration.ThrottlePolicy, null, Configuration.FallbackClientKey, null ); AuthenticationProvider.Configure(appBuilder); appBuilder.UseWebApi(config); }