There is also a new WebApi OData V7.0.0 for ASP.NET Framework.
The nightly version of this package is available from this nightly url.
The APIs are the same as those in WebApi OData V6.x, except for the new namespace
Microsoft.AspNet.OData for V7, which is changed from
Both packages depends on OData Lib 7.0.0.
The code for the packages can be found here
Web API OData for ASP.NET Core Beta1, has following limitations which are known issues:
- Batching is not fully supported
- Using EnableQuery in an HTTP route, i.e. non-OData route, is not fully functional
- #1175 - When you first start your service under a debugger, the project app URL will
likely make a request on a non-OData route. This will fail with an exception
Value cannot be null. Parameter name: routeName. You can work around this issue by adding
Configure. You can configure the default startup request in Project properties, Debug, App URL.
Web API OData for ASP.NET, there are no known issues.
OData V7.0.0 for ASP.NET Core 2.x
The new OData V7.0.0 for ASP.NET Core 2.x package supports the same features set as Web API OData V6.0.0 but works with ASP.NET Core. You can learn more about ASP.NET Core from the documentation.
To get started with OData V7.0.0 for ASP.NET Core 2.x, you can use code that is very similar to Web API OData V6.0.0. All of the documentation in Writing a simple OData V4 service is correct except for configuring the OData endpoint. Instead of using the Register() method, you’ll follow the new service + route configuration model used in ASP.NET Core.
The namespace for both Web API OData packages is Microsoft.AspNet.OData.
a. Create the Visual Studio project
In Visual Studio 2017, create a new C# project from the ASP.NET Core Web Application template. Name the project “ODataService”.
In the New Project dialog, select ASP.NET Core 2.0 and select the WebApi template. Click OK.
b. Install the OData packages
In the Nuget Package Manager, install
Microsoft.AspNetCore.OData and all it’s dependencies.
c. Add a model class
Add a C# class to the Models folder:
d. Add a controller class
Add a C# class to the Controllers folder:
In the controller, we defined a
List<Product> object which has one product element. It’s considered as an in-memory storage
of the data of the OData service.
We also defined a
Get method that returns the list of products. The method refers to the handling of HTTP GET requests. We’ll
cover that in the sections about routing.
Get method is decorated with
EnableQueryAttribute, which in turns supports OData query options, for example
$expand, $filter etc.
e. Configure the OData Endpoint
Open the file Startup.cs. Replace the existing
Configure methods with the
f. Start the OData service
Start the OData service by running the project and open a browser to consume it. You should be able to get access to the service
http://host/odata/ in which
http://host/odata/ is the root path of your service. The metadata document
can be accessed at
GET http://host:port/odata/$metadata and the products at
GET http://host:port/odata/Products where
host:port is the host and port of your service, usually something like
As mentioned earlier, most of the samples for Web API OData V6.0.0 apply to Web API OData V7.0.0. One of the design goals was to keep the API between the two as similar as possible. While the APIs are similar, they are not identical due to differences between ASP.NET and ASP.NET Core, such as HttpRequestMessage is now HttpRequest.
Microsoft.AspNetCore.OData packages support same set of OData routing conventions, including default built-in routing conventions and attribute rounting convention, so that each request can be routed to matching controller for processing. All routing conventions implement the interface
IODataRoutingConvention, however, with different definitions, as highlighted below, for the two packages due to different route matching implementations based on ASP.NET Framework and ASP.NET Core:
- For ASP.NET Framework:
- For ASP.NET Core 2.x:
Specific routing convention, e.g. MetadataRoutingConvention, typically implements the package-specific interface, provides package-specific implementation, and shares common logic for both platform in the
Microsoft.AspNet.OData.Shared shared project.