public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // Remove XML var applicationXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes .FirstOrDefault(p => p.MediaType == "application/xml"); config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(applicationXmlType); // Camel case names var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); //Support JsonP http://en.wikipedia.org/wiki/JSONP //Install-Package WebApiContrib.Formatting.Jsonp var jsonpFormatter = new JsonpMediaTypeFormatter(jsonFormatter); config.Formatters.Insert(0, jsonpFormatter); //Tell WebApi to create custom MediaTypes CreateMediaTypes(jsonFormatter); //Use your own ControllerSelector config.Services.Replace(typeof(IHttpControllerSelector), new ApiVersioningSelector(config)); }
public static void Register(HttpConfiguration config) { config.EnableCors(); // Web API configuration and services // Configure Web API to use only bearer token authentication. config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "Food", routeTemplate: "webapi/nutrition/food/{foodid}", defaults: new { controller = "Food", foodid = RouteParameter.Optional, log = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "FoodType", routeTemplate: "webapi/nutrition/foodtype/{foodid}", defaults: new { controller = "FoodType", foodid = RouteParameter.Optional, log = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "SellersFood", routeTemplate: "webapi/nutrition/food/{foodid}/sellers/{sellerid}", defaults: new { controller = "Sellers", sellerid = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "Diaries", routeTemplate: "webapi/user/diaries/{dairyid}", defaults: new { controller = "diaries", dairyid = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "DiariesEntries", routeTemplate: "webapi/user/diaries/{dairyid}/entries/{entrieid}", defaults: new { controller = "entries", entrieid = RouteParameter.Optional, log = RouteParameter.Optional } ); //config.Routes.MapHttpRoute( // name: "DefaultApi", // routeTemplate: "api/{controller}/{id}", // defaults: new { id = RouteParameter.Optional } //); //GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); var jsonFormater = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); if (jsonFormater != null) jsonFormater.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); var formattier = new JsonpMediaTypeFormatter(jsonFormater); config.Formatters.Insert(0, formattier); # if !DEBUG //Force HTTPS config.Filters.Add(new RequireHttpsAttribute()); #endif }
public static void RegisterFormatters(MediaTypeFormatterCollection formatters) { var jsonFormatter = formatters.JsonFormatter; jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); var jsonpFormatter = new JsonpMediaTypeFormatter(jsonFormatter); formatters.Add(jsonpFormatter); }
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: "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: "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(); var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); // Add support JSONP var formatter = new JsonpMediaTypeFormatter(jsonFormatter, "cb"); config.Formatters.Insert(0, formatter); #if !DEBUG // Force HTTPS on entire API config.Filters.Add(new RequireHttpsAttribute()); #endif }
public static void RegisterFormatters(MediaTypeFormatterCollection formatters) { var jsonFormatter = formatters.JsonFormatter; jsonFormatter.SerializerSettings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; // Insert the JSONP formatter in front of the standard JSON formatter. var jsonpFormatter = new JsonpMediaTypeFormatter(formatters.JsonFormatter); formatters.Insert(0, jsonpFormatter); }
public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "cep/{zipCode}", defaults: new { controller = "Address", action = "Get" }, constraints: new { zipCode = @"^\d+$" } ); var jsonpFormatter = new JsonpMediaTypeFormatter { Indent = true }; config.Formatters.Insert(0, jsonpFormatter); config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); config.Formatters.JsonFormatter.Indent = true; config.EnableSystemDiagnosticsTracing(); }
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); json.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore; json.SerializerSettings.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Ignore; var jsonp = new JsonpMediaTypeFormatter(json); //GlobalConfiguration.Configuration.Formatters.Insert(0, jsonp); GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); }
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 }
public static void Register(HttpConfiguration config) { //config.Routes.MapHttpRoute( // name: "DefaultApi", // routeTemplate: "api/{controller}/{id}", // defaults: new { id = RouteParameter.Optional } //); config.Routes.MapHttpRoute( name: "User", routeTemplate: "api/Users/{id}", defaults: new { controller = "User", id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "ContactGroup", routeTemplate: "api/Users/{userid}/contactgroup/{contactgroupid}", defaults: new { controller = "ContactGroup", contactgroupid = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "Contacts", routeTemplate: "api/contactgroup/{contactgroupid}/contacts/{contactId}", defaults: new { controller = "Contacts", contactId = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "Notifications", routeTemplate: "api/Users/{userid}/Notifications/{notificationid}", defaults: new { controller = "Notifications", notificationid = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "Organizations", routeTemplate: "api/Organizations/{organizationid}", defaults: new { controller = "Organizations", organizationid = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "Message", routeTemplate: "api/contactgroup/{contactgroupid}/notifications/{notificationid}/Message/{messageId}", defaults: new { controller = "Message", messageId = RouteParameter.Optional } ); 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(); // 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(); var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize; config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; // Add support JSONP var formatter = new JsonpMediaTypeFormatter(jsonFormatter, "cb"); config.Formatters.Insert(0, formatter); #if !DEBUG // Force HTTPS on entire API config.Filters.Add(new RequireHttpsAttribute()); #endif }
public static void RegisterFormatters(MediaTypeFormatterCollection formatters) { var jsonFormatter = formatters.JsonFormatter; var jsonpFormatter = new JsonpMediaTypeFormatter(formatters.JsonFormatter); formatters.Insert(0, jsonpFormatter); }
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); }