DotEmilu 1.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package DotEmilu --version 1.0.1                
NuGet\Install-Package DotEmilu -Version 1.0.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DotEmilu" Version="1.0.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DotEmilu --version 1.0.1                
#r "nuget: DotEmilu, 1.0.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install DotEmilu as a Cake Addin
#addin nuget:?package=DotEmilu&version=1.0.1

// Install DotEmilu as a Cake Tool
#tool nuget:?package=DotEmilu&version=1.0.1                

DotEmilu

A simple, easy-to-use .NET library designed for handling HTTP requests and responses.

Features

  • Supports GET, POST, PUT, and DELETE requests.
  • Handles HTTP responses with status codes and error handling.
  • Built with .NET 8 for cross-platform compatibility (Windows, Linux, macOS).
  • Supports async/await for non-blocking HTTP calls.

How to Use

Follow these simple steps to get started:

  1. Build Your Logic
    Create the logic for your application based on your previously defined request and expected response.

    public class SampleUseCase(IVerifier<SampleRequest> verifier, IPresenter presenter)
        : Handler<SampleRequest, SampleResponse>(verifier, presenter)
    {
        private readonly IPresenter _presenter = presenter;
        private readonly IVerifier<SampleRequest> _verifier = verifier;
    
        protected override async Task<SampleResponse?> HandleResponseAsync(SampleRequest request,
            CancellationToken cancellationToken = default)
        {
            var result = await SomeMethod(request, cancellationToken);
    
            // Add custom validations
            if (string.IsNullOrEmpty(request.Note))
            {
                _verifier.AddError("request", "invalid request");
                return null;
            }
    
            // To custom response you can use Results
            if (request.Date.Year == 2024)
                return ResultIn(Results.Ok($"Congratulations! {result}"));
    
            // Or standard response defined in IPresenter
            if (request.Category >= 10)
                return ResultIn(_presenter.Success($"{result}. Account: {request.Account}. Category: {request.Category}"));
    
            // By default you need return the TResponse
            return new SampleResponse(result);
        }
    
        private async Task<string> SomeMethod(SampleRequest request, CancellationToken cancellationToken = default)
        {
            // Some logic
        }
    }
    
  2. Add Your Endpoint
    Define your endpoint using either Minimal API or a Controller, depending on your project's structure.

    app.MapPost("/api/sample", async ([FromBody] SampleRequest request,
        IHandler<SampleRequest> handler,
        CancellationToken cancellationToken) => await handler.HandleAsync(request, cancellationToken));
    
  3. Register Your Dependencies
    Ensure all required dependencies are registered in your application's dependency injection container.

    builder.Services
        .AddDotEmilu()
        .AddScoped<IHandler<SampleRequest>, SampleUseCase>()
        .AddValidatorsFromAssembly(Assembly.GetExecutingAssembly());
    

For a complete example

Notes:

You need to add the response messages for bad request (400) and server error (500)

{
  "ResultMessage": {
    "ValidationError": {
      "Title": "Bad Request",
      "Detail": "One or more errors"
    },
    "ServerError": {
      "Title": "Server Error",
      "Detail": "Please contact to administrator"
    }
  }
}

And for complex validation use fluent validation

public class SampleValidator : AbstractValidator<SampleRequest>
{
    public SampleValidator()
    {
        RuleFor(s => s.Date)
            .GreaterThanOrEqualTo(DateOnly.FromDateTime(DateTime.Now));

        RuleFor(s => s.Amount)
            .GreaterThan(0);
    }
}
Product 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.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.3 36 2/18/2025
1.0.2 51 2/18/2025
1.0.1 72 2/4/2025
1.0.0 56 1/13/2025

Updated Microsoft.AspNetCore.OpenApi to version 8.0.12 for stability and performance improvements.