Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

suadev/aspnet-core-web-api-using-odata

Repository files navigation

Presentation : https://speakerdeck.com/suadev/add-odata-support-to-asp-dot-net-core-web-api

This repo aims to show that how easily OData can be added to your existing/new Asp.Net Core Web Api to perform all CRUD operations.

This is a simple api that consist of two entities called Product and ProductCategory.

localhost:5000/api/products -> classic rest endpoint

localhost:5000/odata/products -> odata rest endpoint

You can check following sample OData queries and results.

if you like Postman, just import AspNetCore_OData.postman_collection.json file and you will see more sample query in Get folders.

{
 "@odata.context": "http://localhost:5000/odata/$metadata#product_categories",
 "@odata.count": 3,
 "value": [
 {
 "id": "1236a458-0802-4340-bdd4-05859c9aaaad",
 "categoryName": "Headphones"
 },
 {
 "id": "8b726886-e719-413c-a125-939ee5af387d",
 "categoryName": "TV"
 },
 {
 "id": "a65bc1ae-c1c7-4c20-8b3b-4b48490d3fb0",
 "categoryName": "Computers"
 }
 ]
}

 {
 "@odata.context": "http://localhost:5000/odata/$metadata#products",
 "@odata.count": 3,
 "value": [
 {
 "id": "6d42ac79-2b65-460d-9991-22b86ad66fb9",
 "productName": "JBL Tune",
 "categoryId": "1236a458-0802-4340-bdd4-05859c9aaaad",
 "description": "JBL Tune 500BT On-Ear",
 "price": 15,
 "weight": 0.3
 },
 {
 "id": "78a4a7db-073f-4ad9-a157-2a9da0ceae38",
 "productName": "HP Zbook",
 "categoryId": "a65bc1ae-c1c7-4c20-8b3b-4b48490d3fb0",
 "description": "HP Zbook Laptop",
 "price": 2000,
 "weight": 3
 },
 {
 "id": "aec7ce71-bfa6-4b0f-8aef-78816a31c9fa",
 "productName": "LG 32-Inch",
 "categoryId": "8b726886-e719-413c-a125-939ee5af387d",
 "description": "LG 32-Inch 720p LED TV",
 "price": 12000,
 "weight": 60
 }
 ]
}

{
 "@odata.context": "http://localhost:5000/odata/$metadata#products/$entity",
 "id": "6d42ac79-2b65-460d-9991-22b86ad66fb9",
 "productName": "JBL Tune",
 "categoryId": "1236a458-0802-4340-bdd4-05859c9aaaad",
 "description": "JBL Tune 500BT On-Ear",
 "price": 15,
 "weight": 0.3
}

Filter by Price (price greater than 10000) - http://localhost:5000/odata/products?$filter=price%20gt%2010000

{
 "@odata.context": "http://localhost:5000/odata/$metadata#products",
 "value": [
 {
 "id": "aec7ce71-bfa6-4b0f-8aef-78816a31c9fa",
 "productName": "LG 32-Inch",
 "categoryId": "8b726886-e719-413c-a125-939ee5af387d",
 "description": "LG 32-Inch 720p LED TV",
 "price": 12000,
 "weight": 60
 }
 ]
}

{
 "@odata.context": "http://localhost:5000/odata/$metadata#products",
 "value": [
 {
 "id": "6d42ac79-2b65-460d-9991-22b86ad66fb9",
 "productName": "JBL Tune",
 "categoryId": "1236a458-0802-4340-bdd4-05859c9aaaad",
 "description": "JBL Tune 500BT On-Ear",
 "price": 15,
 "weight": 0.3
 },
 {
 "id": "78a4a7db-073f-4ad9-a157-2a9da0ceae38",
 "productName": "HP Zbook",
 "categoryId": "a65bc1ae-c1c7-4c20-8b3b-4b48490d3fb0",
 "description": "HP Zbook Laptop",
 "price": 2000,
 "weight": 3
 },
 {
 "id": "aec7ce71-bfa6-4b0f-8aef-78816a31c9fa",
 "productName": "LG 32-Inch",
 "categoryId": "8b726886-e719-413c-a125-939ee5af387d",
 "description": "LG 32-Inch 720p LED TV",
 "price": 12000,
 "weight": 60
 }
 ]
}

{
 "@odata.context": "http://localhost:5000/odata/$metadata#products",
 "@odata.count": 3,
 "value": [
 {
 "id": "78a4a7db-073f-4ad9-a157-2a9da0ceae38",
 "productName": "HP Zbook",
 "categoryId": "a65bc1ae-c1c7-4c20-8b3b-4b48490d3fb0",
 "description": "HP Zbook Laptop",
 "price": 2000,
 "weight": 3
 },
 {
 "id": "aec7ce71-bfa6-4b0f-8aef-78816a31c9fa",
 "productName": "LG 32-Inch",
 "categoryId": "8b726886-e719-413c-a125-939ee5af387d",
 "description": "LG 32-Inch 720p LED TV",
 "price": 12000,
 "weight": 60
 }
 ]
}

{
 "@odata.context": "http://localhost:5000/odata/$metadata#products",
 "@odata.count": 3,
 "value": []
}

{
 "@odata.context": "http://localhost:5000/odata/$metadata#products(id,productName)",
 "value": [
 {
 "id": "6d42ac79-2b65-460d-9991-22b86ad66fb9",
 "productName": "JBL Tune"
 },
 {
 "id": "78a4a7db-073f-4ad9-a157-2a9da0ceae38",
 "productName": "HP Zbook"
 },
 {
 "id": "aec7ce71-bfa6-4b0f-8aef-78816a31c9fa",
 "productName": "LG 32-Inch"
 }
 ]
}

{
 "@odata.context": "http://localhost:5000/odata/$metadata#products",
 "value": [
 {
 "id": "6d42ac79-2b65-460d-9991-22b86ad66fb9",
 "productName": "JBL Tune",
 "categoryId": "1236a458-0802-4340-bdd4-05859c9aaaad",
 "description": "JBL Tune 500BT On-Ear",
 "price": 15,
 "weight": 0.3,
 "category": {
 "id": "1236a458-0802-4340-bdd4-05859c9aaaad",
 "categoryName": "Headphones"
 }
 },
 {
 "id": "78a4a7db-073f-4ad9-a157-2a9da0ceae38",
 "productName": "HP Zbook",
 "categoryId": "a65bc1ae-c1c7-4c20-8b3b-4b48490d3fb0",
 "description": "HP Zbook Laptop",
 "price": 2000,
 "weight": 3,
 "category": {
 "id": "a65bc1ae-c1c7-4c20-8b3b-4b48490d3fb0",
 "categoryName": "Computers"
 }
 },
 {
 "id": "aec7ce71-bfa6-4b0f-8aef-78816a31c9fa",
 "productName": "LG 32-Inch",
 "categoryId": "8b726886-e719-413c-a125-939ee5af387d",
 "description": "LG 32-Inch 720p LED TV",
 "price": 12000,
 "weight": 60,
 "category": {
 "id": "8b726886-e719-413c-a125-939ee5af387d",
 "categoryName": "TV"
 }
 }
 ]
}

{
 "@odata.context": "http://localhost:5000/odata/$metadata#products(id,productName,category(categoryName))",
 "value": [
 {
 "id": "6d42ac79-2b65-460d-9991-22b86ad66fb9",
 "productName": "JBL Tune",
 "category": {
 "categoryName": "Headphones"
 }
 },
 {
 "id": "78a4a7db-073f-4ad9-a157-2a9da0ceae38",
 "productName": "HP Zbook",
 "category": {
 "categoryName": "Computers"
 }
 },
 {
 "id": "aec7ce71-bfa6-4b0f-8aef-78816a31c9fa",
 "productName": "LG 32-Inch",
 "category": {
 "categoryName": "TV"
 }
 }
 ]
}

Running Locally

  • docker-comppose up (for postgres instance)
  • dotnet run

Migration

  • dotnet ef migrations add "init" -c ProductDbContext -p src/OData.WebApi --output-dir Data/Migrations

About

Demo application of my speech 'Add OData Support to Your Asp.Net Core Web Api' at Dotnet Konf İstanbul. http://dotnetkonf.com/

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /