1

Closed

Error serializing response. Model is inheritance based and using conventional mb.

description

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
Closed Oct 17, 2012 at 10:07 PM by hongyes
Verified in latest build.

comments

hongyes wrote Oct 10, 2012 at 7:48 PM

I can't repro in latest code. Are you using the latest code for testing?

kichalla wrote Oct 10, 2012 at 9:07 PM

I am also not able to repro with latest bits...

HongmeiG wrote Oct 10, 2012 at 9:17 PM

Kiran has found the fix.

Revision: 41b15c411ddab94876d270868e0bc3d9faa4f59a
Author: raghuramn
Date: 10/5/2012 5:08:34 PM
Message:
Issue 484: Self link generation might fail if the model has non-standard