How to configure OData end point in a self-hosted Web API application
Asked Answered
J

1

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?

Jahnke answered 1/5, 2015 at 3:6 Comment(1)
Is this a WebApi project? If yes, the WebApiConfig.cs should be automatically added inside the App_Start folder.Leyba
P
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);
    } 
} 
Professorship answered 1/5, 2015 at 3:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.