helps to process patch request from the minimalAPI
Install my-project with dotnet-cli
dotnet add package PatchRequestMinimal --version 7.0.18
- Replace
- Remove
using PatchRequest;
//================================================================
// Request DTO
public sealed record NestedModel(Guid Id, string Name, int? Value);
public sealed record RequestModel(string Title,
int Number,
NestedModel NestedObject,
IEnumerable<int> IntArray);
//================================================================
// Destination Entity
public sealed record NestedEntity(Guid Id, string Name, int? Value);
public sealed record SourceEntity(string Title,
int Number,
NestedEntity NestedObject,
IEnumerable<int> IntArray);
//================================================================
// Patch endpoint into Program.cs
app.MapPatch("patch-test/{id}", (Guid id,
[FromBody] PatchRequest<RequestModel> request) =>{
SourceEntity entity = dbContext.Set<SourceEntity>()
.First(x => x.Id == id);
RequestResult result = request.Apply(entity);
if(result.Succeeded){
dbContext.Update(entity);
dbContext.SaveChanges();
return Results.Ok(new { Message = "Some property values changed." })
}
var errors = result.Messages.Select(x => x.Description);
return Results.BadRequest(errors);
});
//================================================================
// PatchRequest<T> example requests
/*
{
"operations":[
{
"op": "replace",
"prop": "title",
"value": "new value"
},
{
"op": "replace",
"prop": "nestedObject.name",
"value": "nested object name new value"
},
{
"op": "remove",
"prop": "nestedObject.value",
"value": null
},
{
"op": "replace",
"prop": "intArray",
"value": [1, 2, 3, 4]
}
]
}
*/