AddXMapEndpoints 2.0.0
See the version list below for details.
dotnet add package AddXMapEndpoints --version 2.0.0
NuGet\Install-Package AddXMapEndpoints -Version 2.0.0
<PackageReference Include="AddXMapEndpoints" Version="2.0.0" />
paket add AddXMapEndpoints --version 2.0.0
#r "nuget: AddXMapEndpoints, 2.0.0"
// Install AddXMapEndpoints as a Cake Addin
#addin nuget:?package=AddXMapEndpoints&version=2.0.0
// Install AddXMapEndpoints as a Cake Tool
#tool nuget:?package=AddXMapEndpoints&version=2.0.0
XMaps Enpoints
Auto-generate Minimal API using a WebApplication extension.
Follow those simple steps:
Add the extension method inside your Program.cs class:
app.AddXMapEndpoints(); // 'The Queen' said: It's a kind of magic 😃
NB: If you are using Authorization/Authentication you can configure XMap with the specific overload:
app.AddXMapEndpoints(true); // Minimal API will be decorated with the [Authorize] attribute
Decorate the DTO you want to create/read/update/delete with the �AddXMapEndpoints� attribute:
[AddXMapEndpoints]
public class MyDto {....}
NB: Navigation properties (FK) are automatically loaded. To load also �children' collection navigations you must explicitly declare it within the attribute:
[AddXMapEndpoints(includeChildren: true)]
Add '@using XMap' into _Imports.razor (or put inside your components/pages) if needed (see 'QryObj')
How it works:
Decorating a DTO with the �AddXMapEndpoints� attribute will cause the NET.CORE middleware create those methods:
- GET ⇒ IEnumerable<MyDto>
- GET ⇒ MyDto (searching by key)
- POST ⇒ MyDto
- PUT ⇒ MyDto
- DELETE ⇒ MyDto (using POST verb)
New feature: Do query using System.Linq.Dynamic.Core
- POST ⇒ QryObj<MyDto>
The api, and relative routes, will be created in this way:**
- MapGet ⇒ "/XMap/" + typeof(MyDto).Name
- MapGet ⇒ "/XMap/" + typeof(MyDto).Name + "/{key}"
- MapPost ⇒ "/XMap/" + typeof(MyDto).Name , myDto
- MapPut ⇒ "/XMap/" + typeof(MyDto).Name , myDto
- MapPost ⇒ "/XMap/Delete/" + typeof(MyDto).Name , myDto
New feature: Do query using System.Linq.Dynamic.Core
MapPost ⇒ "/XMap/QryObj/" + typeof(MyDto).Name , qryObj
NB: 'qryObj' is an object containing query definition (using Dynamic.Linq syntax, see examples below)
Examples:
// Get a LIST of DTO
var many = await httpClient.GetFromJsonAsync<List<MyDto>>(baseUri + "/XMap/" + nameof(MyDto));
// Get a SINGLE DTO (with key = 1)
var one = await httpClient.GetFromJsonAsync<MyDto>(baseUri + "/XMap/" + nameof(MyDto) +"/1");
// Create a new entity (mapped from myDto)
var newDto = await httpClient.PostAsJsonAsync<MyDto>(baseUri + "/XMap/" + nameof(MyDto), myDto);
// Update an existing entity (mapped from myDto)
var updDto = await httpClient.PutAsJsonAsync<MyDto>(baseUri + "/XMap/" + nameof(MyDto), myDto);
// Delete an existing entity (mapped from myDto) NB: POST verb is used (to pass dto as body)
var res = await httpClient.PostAsJsonAsync<MyDto>(baseUri + "/XMap/Delete/" + nameof(MyDto), myDto);
New feature: Do query using System.Linq.Dynamic.Core
// Query database (in this example data are filtered with a navigation property)
// 'ParentDtoProperty' is a property mapped using a Navigation)
var qry = new QryObj<MyDto>() { Qry = "ParentDtoProperty==@0", Pars = new object[] { "some value" } };
// POST verb is used (to pass dto as body)
var qryres = await httpClient.PostAsJsonAsync<QryObj<MyDto>>(baseUri + "/XMap/QryObj/" + nameof(MyDto), qry);
// Read content
string jsonContent = await qryres.Content.ReadAsStringAsync();
// Get QryObj
var obj = JsonConvert.DeserializeObject<QryObj<MyDto>>(jsonContent);
// Result property is a collection (IEnumerable<MyDto>)
var myDtoCollection = obj?.Result;
QryObj Class definition (XMap namespace)
namespace XMap
{
public class QryObj<TDto>
{
public string Qry { get; set; }
public object[] Pars { get; set; }
public IEnumerable<TDto> Result { get; set; }
//public Queryable<TDto> Result { get; set; }
}
.....
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- AutoMapper (>= 13.0.1)
- Microsoft.EntityFrameworkCore (>= 8.0.2)
- Newtonsoft.Json (>= 13.0.3)
- System.Linq.Dynamic.Core (>= 1.3.9)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.