I am returning a collection of Car instances from my controller.
Model
static IEdmModel GetImplicit_InheritanceModel()
{
ODataConventionModelBuilder modelBuilder = new ODataConventionModelBuilder();
var vehicles = modelBuilder.EntitySet<Vehicle>("Vehicles");
var cars = modelBuilder.EntitySet<Car>("Cars");
var motorcycles = modelBuilder.EntitySet<Motorcycle>("Motorcycles");
return modelBuilder.GetEdmModel();
}
Exception Details:
System.InvalidOperationException occurred
HResult=-2146233079
Message=EditLink generation failed. Check that you have the 'OData.GetById' route correctly registered.
Source=System.Web.Http.OData
StackTrace:
at System.Web.Http.OData.Builder.Conventions.SelfLinksGenerationConvention.<>c__DisplayClass4.<Apply>b__1(EntityInstanceContext entityContext) in d:\Runtime\src\System.Web.Http.OData\OData\Builder\Conventions\SelfLinksGenerationConvention.cs:line 63
InnerException:
Routes
// Metadata routes to support $metadata and code generation in the WCF Data Service client.
configuration.Routes.MapHttpRoute(ODataRouteNames.Metadata, "$metadata", new { Controller = "ODataMetadata", Action = "GetMetadata" });
configuration.Routes.MapHttpRoute(ODataRouteNames.ServiceDocument, "", new { Controller = "ODataMetadata", Action = "GetServiceDocument" });
// Relationship routes (notice the parameters is {type}Id not id, this avoids colliding with GetById(id)).
configuration.Routes.MapHttpRoute(ODataRouteNames.PropertyNavigation, "{controller}({parentId})/{navigationProperty}");
// Route for manipulating links.
//configuration.Routes.MapHttpRoute(ODataRouteNames.Link, "{controller}({id})/$links/Products");
configuration.Routes.MapHttpRoute(ODataRouteNames.Link, "{controller}({id})/$links/{navigationProperty}");
// Routes for urls both producing and handling urls like ~/Product(1), ~/Products() and ~/Products
configuration.Routes.MapHttpRoute(ODataRouteNames.GetById, "{controller}({id})");
configuration.Routes.MapHttpRoute(ODataRouteNames.DefaultWithParentheses, "{controller}()");
configuration.Routes.MapHttpRoute(ODataRouteNames.Default, "{controller}");
Controller
public class CarsController : ApiController
{
public IEnumerable<Car> Get()
{
List<Car> cars = new List<Car>();
cars.Add(new Car()
{
Id = 1,
Model = "BMW",
Name = "Mini"
});
return cars;
}
Request:
GET
http://kirandesktop:50231/Cars HTTP/1.1
User-Agent: Fiddler
Host: kirandesktop:50231