public static void Register(HttpConfiguration config) { // OData configuration ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet<Author>("authors"); builder.EntitySet<Blog>("blogs"); builder.EntitySet<Comment>("comments"); builder.EntitySet<Post>("posts"); builder.ContainerName = "BlogItDataService"; config.Routes.MapODataServiceRoute("OData", "api/odata", builder.GetEdmModel()); var queryAttributes = new EnableQueryAttribute() { PageSize = 100, MaxTop = 100, EnsureStableOrdering = false }; config.AddODataQueryFilter(queryAttributes); // Web API attribute routing config.MapHttpAttributeRoutes(); // Additional formatters config.Formatters.Add(new BsonMediaTypeFormatter()); }
public static void Register(HttpConfiguration config) { // Web API configuration and services // Configure Web API to use only bearer token authentication. config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); // OData // Query support //config.EnableQuerySupport(); var odataFilter = new EnableQueryAttribute() { MaxExpansionDepth = 4 }; config.AddODataQueryFilter(odataFilter); //config.Routes.MapODataRoute( // routeName: "ODataRoute", // routePrefix: "odata", // model: edm, // batchHandler: new BatchHandler(GlobalConfiguration.DefaultServer)); // Add the CompositeKeyRoutingConvention var conventions = System.Web.Http.OData.Routing.Conventions.ODataRoutingConventions.CreateDefault(); conventions.Insert(0, new CompositeKeyRoutingConvention()); // Routes var edm = DbUtility.GetWealthEconomyContextEdm(); config.Routes.MapODataServiceRoute( routeName: "ODataRoute", routePrefix: "odata", model: edm, pathHandler: new System.Web.Http.OData.Routing.DefaultODataPathHandler(), routingConventions: conventions, batchHandler: new BatchHandler(GlobalConfiguration.DefaultServer)); // Json formatter config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; // Exception logger config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger()); // Exception handler config.Services.Replace(typeof(IExceptionHandler), new GenericExceptionHandler()); }
public void RunQueryableOnAllPossibleTypes(Type type, string queryString) { int seed = RandomSeedGenerator.GetRandomSeed(); Random r = new Random(seed); Type generic = typeof(IEnumerable<>); var collectionType = generic.MakeGenericType(type); Type listType = typeof(List<>).MakeGenericType(type); var array = Activator.CreateInstance(listType); EnableQueryAttribute q = new EnableQueryAttribute(); var configuration = new HttpConfiguration(); configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; configuration.Routes.MapHttpRoute("ApiDefault", "api/{controller}/{id}", new { id = RouteParameter.Optional }); var request = new HttpRequestMessage(HttpMethod.Get, "http://test/api/Objects?" + queryString); request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, configuration); var controllerContext = new HttpControllerContext( configuration, configuration.Routes.GetRouteData(request), request); var actionContext = new HttpActionContext(controllerContext, new ReflectedHttpActionDescriptor() { Configuration = configuration }); var context = new HttpActionExecutedContext(actionContext, null); context.Response = new HttpResponseMessage(System.Net.HttpStatusCode.OK); context.Response.Content = new ObjectContent(collectionType, array, new JsonMediaTypeFormatter()); q.OnActionExecuted(context); Console.WriteLine(context.Response.Content.ReadAsStringAsync().Result); Assert.Equal(HttpStatusCode.OK, context.Response.StatusCode); }