public static HttpConfiguration Register() { var config = new HttpConfiguration(); // Web API routes config.MapHttpAttributeRoutes(); SetMediaTypeFormatters(config); config.DependencyResolver = new NinjectResolver(CreateInfoDigestKernel()); var etagstore = new SqlServerEntityTagStore(ConfigurationManager.ConnectionStrings["InfoDigestContext"].ConnectionString); var cacheHandler = new CacheCow.Server.CachingHandler(config, etagstore) {AddLastModifiedHeader = true}; config.MessageHandlers.Add(cacheHandler); return config; }
public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "Food", routeTemplate: "api/nutrition/foods/{foodid}", defaults: new { controller = "foods", foodid = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "Measures", routeTemplate: "api/nutrition/foods/{foodid}/measures/{id}", defaults: new { controller = "measures", id = RouteParameter.Optional } ); //config.Routes.MapHttpRoute( // name: "Measures2", // routeTemplate: "api/nutrition/foods/{foodid}/measures/{id}", // defaults: new { controller = "measuresv2", id = RouteParameter.Optional } //); config.Routes.MapHttpRoute( name: "Diaries", routeTemplate: "api/user/diaries/{diaryid}", defaults: new { controller = "diaries", diaryid = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "DiaryEntries", routeTemplate: "api/user/diaries/{diaryid}/entries/{id}", defaults: new { controller = "diaryentries", id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "DiarySummary", routeTemplate: "api/user/diaries/{diaryid}/summary", defaults: new { controller = "diarysummary" } ); config.Routes.MapHttpRoute( name: "Tokens", routeTemplate: "api/token", defaults: new { controller = "token" } ); // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type. // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries. // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712. //config.EnableQuerySupport(); var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); jsonFormatter.SerializerSettings.Converters.Add(new LinkModelConverter()); CreateMediaTypes(jsonFormatter); // Add support JSONP var formatter = new JsonpMediaTypeFormatter(jsonFormatter, "cb"); config.Formatters.Insert(0, formatter); // Replace the Controller Configuration config.Services.Replace(typeof(IHttpControllerSelector), new CountingKsControllerSelector(config)); // Configure Caching/ETag Support var connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; // REMINDER: Make sure you've run the SQL Scripts in the // Package Folder! var etagStore = new SqlServerEntityTagStore(connString); var cacheHandler = new CachingHandler(etagStore); config.MessageHandlers.Add(cacheHandler); #if !DEBUG // Force HTTPS on entire API config.Filters.Add(new RequireHttpsAttribute()); #endif }
/// <summary>Registers the specified configuration.</summary> /// <param name="config">The configuration.</param> /// <param name="unityContainer">The unity container.</param> /// <param name="unitOfWork">The unit of work.</param> public static void Register(HttpConfiguration config, IUnityContainer unityContainer, IUnitOfWork unitOfWork) { var applicationSettingRepository = unitOfWork.GetTypedRepository<IApplicationSettingRepository>(); etagCacheServerDuration = applicationSettingRepository.GetOrCreateByName<int>("EtagCacheServerDuration"); etagCacheClientDuration = applicationSettingRepository.GetOrCreateByName<int>("EtagCacheClientDuration"); #if !DEBUG // Configure Web API to use only bearer token authentication. // Only suppress if not in debug mode, this allows browsing the WebAPI if in debug mode. config.SuppressDefaultHostAuthentication(); #endif config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); config.Filters.Add(new ModelStateValidationFilter()); config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new SelectSupportConverter()); var browserFormatter = new BrowserJsonFormatter { SerializerSettings = { ContractResolver = new CamelCasePropertyNamesContractResolver() } }; browserFormatter.SerializerSettings.Converters.Add(new SelectSupportConverter()); config.Formatters.Add(browserFormatter); config.DependencyResolver = new UnityDependencyResolver(unityContainer); // Changing this setting requires a website restart if (applicationSettingRepository.GetOrCreateByName<bool>("Caching_EnableEtags")) { var etagStore = new SqlServerEntityTagStore(ConfigurationManager.ConnectionStrings["InSite.Commerce"].ConnectionString); // The vary by in the constructor needs to be something that is unique per user so it generates ETags uniquely per user // Cookie contains a cookie we generate InsiteCacheId that is a guid per user. var cacheHandler = new CachingHandler(config, etagStore, "Cookie") { // This must be false so IE client side caching works, anything that needs to vary needs to be done by uri or querystring AddVaryHeader = false, AddLastModifiedHeader = true, RoutePatternProvider = new CacheRoutePatternProvider(), CacheControlHeaderProvider = CacheControlHeaderProvider, CacheRefreshPolicyProvider = CacheRefreshPolicyProvider }; config.MessageHandlers.Add(cacheHandler); } config.MessageHandlers.Add(new LocalizationHandler()); config.MapHttpAttributeRoutes(new InheritanceDirectRouteProvider()); // There can be multiple exception loggers. (By default, no exception loggers are registered.) config.Services.Add(typeof(IExceptionLogger), unityContainer.Resolve<IExceptionLogger>()); // There must be exactly one exception handler. (There is a default one that may be replaced.) config.Services.Replace(typeof(IExceptionHandler), unityContainer.Resolve<IExceptionHandler>()); }
public static void Register(HttpConfiguration config) { //var container = new UnityContainer(); //container.RegisterType<IDbContext, RCDB>(new HierarchicalLifetimeManager()); //container.LoadConfiguration(); //config.DependencyResolver = new UnityResolver(container); config.DependencyResolver = IoC.IocContainer.UnityResolver; config.Routes.MapHttpRoute( name: "Restaurants", routeTemplate: "api/rc/restaurants/{restaurantid}", defaults: new { controller = "restaurants", restaurantid = RouteParameter.Optional } //,constraints: new { id = @"\d+" }//one or more digits ); config.Routes.MapHttpRoute( name: "Reviews", routeTemplate: "api/rc/restaurants/{restaurantid}/reviews/{id}", defaults: new { controller = "reviews", id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "Orders", routeTemplate: "api/client/orders/{orderid}", defaults: new { controller = "orders", orderid = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "OrdersItems", routeTemplate: "api/client/orders/{orderid}/items/{id}", defaults: new { controller = "orderitems", id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "OrderSummary", routeTemplate: "api/client/orders/{orderid}/summary", defaults: new { controller = "ordersummary"} ); //config.Routes.MapHttpRoute( // name: "Products", // routeTemplate: "api/products/{id}", // defaults: new { controller = "products", id = RouteParameter.Optional } //); config.Routes.MapHttpRoute( name: "Products", routeTemplate: "api/products/{id}/{action}/{entityid}", defaults: new { controller = "products", id = RouteParameter.Optional, entityid = RouteParameter.Optional, action = "DefaultAction" } ); //config.Routes.MapHttpRoute( // name: "Products", // routeTemplate: "api/products/{id}", // defaults: new // { // controller = "productsv2", // id = RouteParameter.Optional // } //); //using routing to version with URL /* config.Routes.MapHttpRoute( name: "Products2", routeTemplate: "api/v2/products/{id}", defaults: new { controller = "productsv2", id = RouteParameter.Optional } ); */ //config.Routes.MapHttpRoute( // name: "DefaultApi", // routeTemplate: "api/{controller}/{id}", // defaults: new { id = RouteParameter.Optional } //); //VP1 -- makes JSON the default webApi response type //config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); //VP2 //var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml"); //config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); //VP3 //var xmlFormatter = config.Formatters.OfType<XmlMediaTypeFormatter>().FirstOrDefault(); //config.Formatters.Remove(xmlFormatter); //config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); //config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml")); //config.Formatters.JsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json")); //GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json")); //var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); //jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); //jsonFormatter.SerializerSettings.Converters.Add(new LinkModelConverter()); /* //Add support JSONP var jsonpformatter = new JsonpMediaTypeFormatter(jsonFormatter,"cb"); config.Formatters.Insert(0,jsonpformatter); config.Formatters.JsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json")); jsonFormatter.SerializerSettings.Converters.Add(new LinkModelConverter()); CreateMediaTypes(jsonFormatter); //Add support JSONP var jsonpformatter = new JsonpMediaTypeFormatter(jsonFormatter, "cb"); config.Formatters.Insert(0, jsonpformatter); */ var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); jsonFormatter.MediaTypeMappings.Add(new RequestHeaderMapping("Accept", "text/html", StringComparison.InvariantCultureIgnoreCase, true, "application/json")); jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); jsonFormatter.SerializerSettings.Converters.Add(new LinkModelConverter()); var jsonpFormatter = new JsonpMediaTypeFormatter(jsonFormatter, "cb"); config.Formatters.Insert(0, jsonpFormatter); CreateMediaTypes(jsonFormatter); //replace the Controller original configiration with custom config //web api 1 //not gonna to use it in WEB API 2 config.Services.Replace(typeof(IHttpControllerSelector), new RCControllerSelector(config)); //custom code //Forse HTTPS on entire API #if !DEBUG config.Filters.Add(new RequireHttpsAttribute()); #endif //Configure Caching/Etag support var connString = ConfigurationManager.ConnectionStrings["RCDB"].ConnectionString; var etagStore = new SqlServerEntityTagStore(connString); //var cacheHandler = new CachingHandler(config); var cacheHandler = new CachingHandler(config, etagStore); cacheHandler.AddLastModifiedHeader = false; //config.MessageHandlers.Add(cacheHandler); // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type. // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries. // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712. //config.EnableQuerySupport(); // To disable tracing in your application, please comment out or remove the following line of code // For more information, refer to: http://www.asp.net/web-api config.EnableSystemDiagnosticsTracing(); }
public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); /* config.Routes.MapHttpRoute( name: "Food", routeTemplate: "api/nutrition/{foodid}", defaults: new { Controller = "Foods", foodid = RouteParameter.Optional }, constraints: new { id="/d+"} //regular expression for the parameter so its only an integer that accepted ); */ config.Routes.MapHttpRoute( name: "Measures", routeTemplate: "api/nutrition/{foodid}/measures/{id}", defaults: new { Controller = "measures", id = RouteParameter.Optional }, constraints: new { id = "/d+" } //regular expression for the parameter so its only an integer that accepted ); /* config.Routes.MapHttpRoute( name: "Measures2", routeTemplate: "api/nutrition/{foodid}/measures/{id}", defaults: new { Controller = "MeasuresV2", id = RouteParameter.Optional }, constraints: new { id = "/d+" } //regular expression for the parameter so its only an integer that accepted ); */ config.Routes.MapHttpRoute( name: "Diaries", routeTemplate: "api/user/diaries/{diaryid}", defaults: new { Controller = "diaries", diaryid = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "DiarySummary", routeTemplate: "api/user/diaries/{diaryid}/summary", defaults: new { Controller = "DiarySummary" } ); config.Routes.MapHttpRoute( name: "Token", routeTemplate: "api/token", defaults: new { Controller = "token" } ); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type. // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries. // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712. //config.EnableQuerySupport(); var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); jsonFormatter.SerializerSettings.Converters.Add(new LinkModelConverter()); //converters know how to convert into and out of json CreateMediaTypes(jsonFormatter); //Add support for jsonp //without accepts header will go to json, need accepts with javascript //also nees ?callback= in the url var formatter = new JsonpMediaTypeFormatter(jsonFormatter,"cb"); config.Formatters.Insert(0, formatter); //Replace the controller configuration with our controller selector //config.Services.Replace(typeof(IHttpControllerSelector),new CountingKsControllerSelector(config)); //Configure caching/etag support //this outputs etag after request in response header var connString=ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; var etagStore = new SqlServerEntityTagStore(connString); var cacheHandler = new CachingHandler(config); //not sure if config is correct, example didnt pass any params cacheHandler.AddLastModifiedHeader = false; // not needed, true by default config.MessageHandlers.Add(cacheHandler); //Add support for cross origin resource supprt (CORS) var attr = new EnableCorsAttribute("*", "*", "GET"); config.EnableCors(attr); //allowed to enable, not enabled yet #if !DEBUG //Force HTTPS on entire API config.Filters.Add(new RequireHttpsAttribute()); #endif }
public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); //config.Routes.MapHttpRoute( // name: "Food", // routeTemplate: "api/nutrition/foods/{foodid}", // defaults: new { controller = "foods", foodid = RouteParameter.Optional } //); config.Routes.MapHttpRoute( name: "Measures", routeTemplate: "api/nutrition/foods/{id}/measures/{id}", defaults: new { controller = "measures", id = RouteParameter.Optional } ); // config.Routes.MapHttpRoute( // name: "Measures2", // routeTemplate: "api/nutrition/foods/{id}/measures/{id}", // defaults: new { controller = "measuresv2", id = RouteParameter.Optional } //); config.Routes.MapHttpRoute( name: "Diaries", routeTemplate: "api/user/diaries/{diaryid}", defaults: new { controller = "diaries", diaryid = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "DiariesEntries", routeTemplate: "api/user/diaries/{diaryid}/entries/{id}", defaults: new { controller = "diaryentries", diaryid = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "DiarySummary", routeTemplate: "api/user/diaries/{diaryid}/summary", defaults: new { controller = "diarysummary" } ); config.Routes.MapHttpRoute( name: "Token", routeTemplate: "api/token", defaults: new { controller = "Token" } ); // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type. // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries. // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712. //config.EnableQuerySupport(); //return Camelcase for Json formats: var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); CreateMediaTypes(jsonFormatter); // Adding support JSONP using : "webapicontrib.formatting.jsonp" in nugget var formatter = new JsonpMediaTypeFormatter(jsonFormatter, "cb"); config.Formatters.Insert(0, formatter); // Makes API calls in jsonp formatter first // Adds a Https requirement for all API calls config.Filters.Add(new RequireHttpsAttribute()); // Adds CORs By adding: "microsoft.aspnet.webapi.cors" in nugget var attr = new EnableCorsAttribute("*", "*", "GET"); // Allows entire website to use Cors config.EnableCors(attr); // Replace the Controller Configuration config.Services.Replace(typeof(IHttpControllerSelector), new CountingKsControllerSelector(config)); // Configure Caching/ETag Support using CacheCow Server var connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; var etagStore = new SqlServerEntityTagStore(connString); var cacheHandler = new CachingHandler(config, etagStore); config.MessageHandlers.Add(cacheHandler); }