Skip to content

Instantly share code, notes, and snippets.

@xuzhg
Last active November 28, 2019 13:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xuzhg/f2e9d6d1f66c4f82be1e4d4824277cd3 to your computer and use it in GitHub Desktop.
Save xuzhg/f2e9d6d1f66c4f82be1e4d4824277cd3 to your computer and use it in GitHub Desktop.
BookStoreContext.cs
public class BookStoreContext : DbContext
{
public BookStoreContext(DbContextOptions<BookStoreContext> options)
: base(options)
{
}
public DbSet<Book> Books { get; set; }
public DbSet<Press> Presses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Book>().OwnsOne(c => c.Location);
}
}
@fabriziogelsi
Copy link

Response header: (Should be "application/json; odata.metadata=minimal; odata.streaming=true"?) I got:
Content-Type application/json; charset=utf-8

@xuzhg
Copy link
Author

xuzhg commented Nov 27, 2019

@fabriziogelsi I see. Did you add more books into the Datasource? In my sample, there's only two books sample, you add "PageSize=2", the whole data source meets the page size requirement, so the server returns all data and no nextlink added.

If you change to [Pagesize=1], you will get the response:

{
    "@odata.context": "http://localhost:5001/odata/$metadata#Books",
    "value": [
        {
            "Id": 1,
            "ISBN": "978-0-321-87758-1",
            "Title": "Essential C#5.0",
            "Author": "Mark Michaelis",
            "Price": 59.99,
            "Location": {
                "City": "Redmond",
                "Street": "156TH AVE NE"
            }
        }
    ],
    "@odata.nextLink": "http://localhost:5001/odata/Books?$skip=1"
}

@fabriziogelsi
Copy link

Yes, I added 5 books. When I do the same than you, the response is:

[ { "id": 1, "isbn": "978-0-321-87758-1", "title": "Essential C#5.0", "author": "Mark Michaelis", "price": 59.99, "location": { "city": "Redmond", "street": "156TH AVE NE" }, "press": { "id": 1, "name": "Addison-Wesley", "email": null, "category": 0 } } ]

Which version NetCore are you using? And OData?. I see all the examples in internet that the response contains all the data, but I can't take the same response, Idk why :S I've just copied your example, and added the "[Enable Query(PageSize =)]" what is working, the pagination, but the other data is not retrieve.

@xuzhg
Copy link
Author

xuzhg commented Nov 27, 2019

Your payload looks a "Normal" JSON Payload, it's not OData JSON Payload. OData JSON Payload includes both control information and entity data. "@odata.context" and "@odata.nextLink" are control data, why does your data not have "@odata.context"? Do you set the metadata level as None? However, your metadata is "odata.metadata=minimal" not "odata.metadata=none". So, it's weird. Please compare your sample with my sample to see what's the difference.

I didn't change my project configuration. I cloned the sample and built/run in the Visual Studio 2019.

@fabriziogelsi
Copy link

No. My header's response is: Content-Type application/json; charset=utf-8
I was wondering if I should receive a header like this: "application/json; odata.metadata=minimal; odata.streaming=true".
I will check again, but I've just copied your sample, so I don't understand why is not working :S. I'm using VS2019 too.

@J0rgeSerran0
Copy link

Great @xuzhg :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment