7

I'm building an OWIN self-hosted Web API 2 service. I need for this service to expose OData end points.

The traditional IIS-hosted method involves App_Start/WebApiConfig.cs:

using ProductService.Models;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // New code:
        ODataModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<Product>("Products");
        config.MapODataServiceRoute(
            routeName: "ODataRoute",
            routePrefix: null,
            model: builder.GetEdmModel());
    }
}

However, in my self-hosted solution there is no such thing as WebApiConfig.cs

Where and how can I specify this OData configuration?

abatishchev
  • 92,232
  • 78
  • 284
  • 421
Eugene Goldberg
  • 11,384
  • 15
  • 81
  • 138
  • Is this a WebApi project? If yes, the WebApiConfig.cs should be automatically added inside the App_Start folder. – Mahesh Kava May 01 '15 at 03:33

1 Answers1

13

You're correct, there isn't necessarily such a thing as WebApiConfig.cs in a self-hosted OWIN project since you declare the middleware you need as you need it. However, if you're following OWIN self-hosting tutorials, you've probably bumped into the Startup.cs concept, which is what you can use, since you can instantiate your HttpConfiguration there.

public class Startup 
{ 
    public void Configuration(IAppBuilder appBuilder) 
    { 
        // Configure Web API for self-host. 
        HttpConfiguration config = new HttpConfiguration(); 
        config.Routes.MapHttpRoute( 
            name: "DefaultApi", 
            routeTemplate: "api/{controller}/{id}", 
            defaults: new { id = RouteParameter.Optional } 
        );  

        ODataModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<Product>("Products");
        config.MapODataServiceRoute(
        routeName: "ODataRoute",
        routePrefix: null,
        model: builder.GetEdmModel());

        appBuilder.UseWebApi(config);
    } 
} 
David L
  • 28,075
  • 7
  • 54
  • 84