Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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
        }
Ejemplo n.º 3
0
        /// <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>());
        }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 5
0
        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
        }
Ejemplo n.º 6
0
        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);
        }