Examples
3fd50123cb571236410959f24a9340d9264d84e8
9 files changed
.claude/settings.local.jsonREADME.mdtest/VanDerHeijden.JsonBodyProviderTest/Controllers/EventsController.cstest/VanDerHeijden.JsonBodyProviderTest/Controllers/ItemsController.cstest/VanDerHeijden.JsonBodyProviderTest/Controllers/OrdersController.cstest/VanDerHeijden.JsonBodyProviderTest/Controllers/UsersController.cstest/VanDerHeijden.JsonBodyProviderTest/JsonBodyProviderTest.httptest/VanDerHeijden.JsonBodyProviderTest/Program.cstest/VanDerHeijden.JsonBodyProviderTest/wwwroot/Index.html
diff --git a/.claude/settings.local.json b/.claude/settings.local.json
new file mode 100644
index 0000000..00fc07d
--- /dev/null
+++ b/.claude/settings.local.json
@@ -0,0 +1,7 @@
+{
+ "permissions": {
+ "allow": [
+ "Bash(dotnet build:*)"
+ ]
+ }
+}
diff --git a/README.md b/README.md
index 5e0ef88..8c53404 100644
--- a/README.md
+++ b/README.md
@@ -66,11 +66,11 @@ POST /api/users
Content-Type: application/json
{
- "name": "Lisa van Dijk",
- "age": 34,
- "email": "lisa@example.com",
- "roles": ["editor", "reviewer"],
- "isActive": true
+ "Name": "Lisa van Dijk",
+ "Age": 34,
+ "Email": "lisa@example.com",
+ "Roles": ["editor", "reviewer"],
+ "IsActive": true
}
```
@@ -92,12 +92,12 @@ public IActionResult PlaceOrder(
```json
{
- "orderNumber": "ORD-2025-78412",
- "orderDate": "2025-06-18",
- "totalAmount": 1249.95,
- "productCodes": ["PROD-A42", "PROD-B17", "PROD-C09"],
- "customerId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
- "remark": ""
+ "OrderNumber": "ORD-2025-78412",
+ "OrderDate": "2025-06-18",
+ "TotalAmount": 1249.95,
+ "ProductCodes": ["PROD-A42", "PROD-B17", "PROD-C09"],
+ "CustomerId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
+ "Remark": ""
}
```
@@ -120,16 +120,16 @@ public IActionResult TrackEvent(
```json
{
- "eventName": "purchase_completed",
- "userId": "usr_9k3j2p8x",
- "timestamp": "2025-06-18T14:22:09Z",
- "value": 1,
- "properties": {
- "category": "electronics",
- "source": "newsletter"
+ "EventName": "purchase_completed",
+ "UserId": "usr_9k3j2p8x",
+ "Timestamp": "2025-06-18T14:22:09Z",
+ "Value": 1,
+ "Properties": {
+ "Category": "electronics",
+ "Source": "newsletter"
},
- "isConversion": true,
- "campaignId": null
+ "IsConversion": true,
+ "CampaignId": null
}
```
@@ -150,8 +150,8 @@ public IActionResult PatchItem(
```json
{
- "title": "Updated task name",
- "priority": 3
+ "Title": "Updated task name",
+ "Priority": 3
}
```
@@ -162,7 +162,7 @@ public IActionResult PatchItem(
- No wrapper DTO needed
- Empty strings stay empty strings
- Lists behave nicely (no random fallback to default(T) on parse errors)
-- Headers and cookies are also available as parameters
+- Headers and cookies are also available as parameters (optional)
## Golden rule (repeat until it hurts)
diff --git a/test/VanDerHeijden.JsonBodyProviderTest/Controllers/EventsController.cs b/test/VanDerHeijden.JsonBodyProviderTest/Controllers/EventsController.cs
new file mode 100644
index 0000000..4f3a4a1
--- /dev/null
+++ b/test/VanDerHeijden.JsonBodyProviderTest/Controllers/EventsController.cs
@@ -0,0 +1,20 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace VanDerHeijden.JsonBodyProviderTest.Controllers;
+
+[Route("api")]
+public class EventsController : ControllerBase
+{
+ [HttpPost("events")]
+ public IActionResult TrackEvent(
+ string EventName,
+ string UserId,
+ DateTime Timestamp,
+ int Value,
+ Dictionary<string, string> Properties,
+ bool IsConversion,
+ Guid? CampaignId)
+ {
+ return Ok(new { EventName, UserId, Timestamp, Value, Properties, IsConversion, CampaignId });
+ }
+}
diff --git a/test/VanDerHeijden.JsonBodyProviderTest/Controllers/ItemsController.cs b/test/VanDerHeijden.JsonBodyProviderTest/Controllers/ItemsController.cs
new file mode 100644
index 0000000..47690d8
--- /dev/null
+++ b/test/VanDerHeijden.JsonBodyProviderTest/Controllers/ItemsController.cs
@@ -0,0 +1,18 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace VanDerHeijden.JsonBodyProviderTest.Controllers;
+
+[Route("api")]
+public class ItemsController : ControllerBase
+{
+ [HttpPatch("items/{id}")]
+ public IActionResult PatchItem(
+ Guid id,
+ string? Title,
+ string? Description,
+ bool? Active,
+ int? Priority)
+ {
+ return Ok(new { id, Title, Description, Active, Priority });
+ }
+}
diff --git a/test/VanDerHeijden.JsonBodyProviderTest/Controllers/OrdersController.cs b/test/VanDerHeijden.JsonBodyProviderTest/Controllers/OrdersController.cs
new file mode 100644
index 0000000..a2eea0f
--- /dev/null
+++ b/test/VanDerHeijden.JsonBodyProviderTest/Controllers/OrdersController.cs
@@ -0,0 +1,19 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace VanDerHeijden.JsonBodyProviderTest.Controllers;
+
+[Route("api")]
+public class OrdersController : ControllerBase
+{
+ [HttpPost("orders")]
+ public IActionResult PlaceOrder(
+ string OrderNumber,
+ DateOnly OrderDate,
+ decimal TotalAmount,
+ List<string> ProductCodes,
+ Guid CustomerId,
+ string? Remark = null)
+ {
+ return Ok(new { OrderNumber, OrderDate, TotalAmount, ProductCodes, CustomerId, Remark });
+ }
+}
diff --git a/test/VanDerHeijden.JsonBodyProviderTest/Controllers/UsersController.cs b/test/VanDerHeijden.JsonBodyProviderTest/Controllers/UsersController.cs
new file mode 100644
index 0000000..d8e8314
--- /dev/null
+++ b/test/VanDerHeijden.JsonBodyProviderTest/Controllers/UsersController.cs
@@ -0,0 +1,18 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace VanDerHeijden.JsonBodyProviderTest.Controllers;
+
+[Route("api/users")]
+public class UsersController : ControllerBase
+{
+ [HttpPost]
+ public IActionResult Create(
+ string Name,
+ int Age,
+ string Email,
+ List<string> Roles,
+ bool IsActive = true)
+ {
+ return Ok(new { Name, Age, Email, Roles, IsActive });
+ }
+}
diff --git a/test/VanDerHeijden.JsonBodyProviderTest/JsonBodyProviderTest.http b/test/VanDerHeijden.JsonBodyProviderTest/JsonBodyProviderTest.http
index b1409da..e0a19a8 100644
--- a/test/VanDerHeijden.JsonBodyProviderTest/JsonBodyProviderTest.http
+++ b/test/VanDerHeijden.JsonBodyProviderTest/JsonBodyProviderTest.http
@@ -1,5 +1,7 @@
@JsonBodyProviderTest_HostAddress = http://localhost:5129
+### Original test – alle typen
+
POST {{JsonBodyProviderTest_HostAddress}}/First/Test
Content-Type: application/json
@@ -24,5 +26,59 @@ Content-Type: application/json
"Man": 32000,
"Dater" : "2026-07-13",
"Timer" : "12:34:56"
+}
+
+### Example 1 – Classic user creation
+
+POST {{JsonBodyProviderTest_HostAddress}}/api/users
+Content-Type: application/json
+
+{
+ "Name": "Lisa van Dijk",
+ "Age": 34,
+ "Email": "lisa@example.com",
+ "Roles": ["editor", "reviewer"],
+ "IsActive": true
+}
+
+### Example 2 – Order with items
+
+POST {{JsonBodyProviderTest_HostAddress}}/api/orders
+Content-Type: application/json
+
+{
+ "OrderNumber": "ORD-2025-78412",
+ "OrderDate": "2025-06-18",
+ "TotalAmount": 1249.95,
+ "ProductCodes": ["PROD-A42", "PROD-B17", "PROD-C09"],
+ "CustomerId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
+ "Remark": ""
+}
+
+### Example 3 – Analytics event
+POST {{JsonBodyProviderTest_HostAddress}}/api/events
+Content-Type: application/json
+
+{
+ "EventName": "purchase_completed",
+ "UserId": "usr_9k3j2p8x",
+ "Timestamp": "2025-06-18T14:22:09Z",
+ "Value": 1,
+ "Properties": {
+ "category": "electronics",
+ "source": "newsletter"
+ },
+ "IsConversion": true,
+ "CampaignId": null
+}
+
+### Example 4 – Minimal patch (only changed fields)
+
+PATCH {{JsonBodyProviderTest_HostAddress}}/api/items/3fa85f64-5717-4562-b3fc-2c963f66afa6
+Content-Type: application/json
+
+{
+ "Title": "Updated task name",
+ "Priority": 3
}
diff --git a/test/VanDerHeijden.JsonBodyProviderTest/Program.cs b/test/VanDerHeijden.JsonBodyProviderTest/Program.cs
index d6c1ba7..15dc5b2 100644
--- a/test/VanDerHeijden.JsonBodyProviderTest/Program.cs
+++ b/test/VanDerHeijden.JsonBodyProviderTest/Program.cs
@@ -2,8 +2,10 @@ using VanDerHeijden.JsonBodyProvider;
var builder = WebApplication.CreateBuilder(args);
-builder.Services.AddControllers();
-builder.Services.AddJsonBodyProvider();
+builder.Services
+ .AddControllers()
+ .Services
+ .AddJsonBodyProvider(CorrectLists: true);
var app = builder.Build();
diff --git a/test/VanDerHeijden.JsonBodyProviderTest/wwwroot/Index.html b/test/VanDerHeijden.JsonBodyProviderTest/wwwroot/Index.html
index 125a5a8..a8cc217 100644
--- a/test/VanDerHeijden.JsonBodyProviderTest/wwwroot/Index.html
+++ b/test/VanDerHeijden.JsonBodyProviderTest/wwwroot/Index.html
@@ -5,6 +5,6 @@
<title></title>
</head>
<body>
-
+ <p>Examples in JsonBodyProviderTest.http file</p>
</body>
</html>
\ No newline at end of file