SweetMeSoft.Middleware
1.10.108
dotnet add package SweetMeSoft.Middleware --version 1.10.108
NuGet\Install-Package SweetMeSoft.Middleware -Version 1.10.108
<PackageReference Include="SweetMeSoft.Middleware" Version="1.10.108" />
<PackageVersion Include="SweetMeSoft.Middleware" Version="1.10.108" />
<PackageReference Include="SweetMeSoft.Middleware" />
paket add SweetMeSoft.Middleware --version 1.10.108
#r "nuget: SweetMeSoft.Middleware, 1.10.108"
#:package SweetMeSoft.Middleware@1.10.108
#addin nuget:?package=SweetMeSoft.Middleware&version=1.10.108
#tool nuget:?package=SweetMeSoft.Middleware&version=1.10.108
SweetMeSoft.Middleware
Library with a set of Middlewares and services for ASP.NET Core applications.
Description
SweetMeSoft.Middleware is a library for .NET Standard 2.1 that offers components for ASP.NET Core, designed to centralize error management, log requests and facilitate access to services through a Factory pattern.
Main Components
1. ErrorHandlerMiddleware
A middleware for global exception management. Captures unhandled exceptions in the application and transforms them into a standardized JSON response with ProblemDetails format.
Behavior:
AppException(custom exception): Returns400 Bad Request.KeyNotFoundException: Returns404 Not Found.- Any other exception: Returns
500 Internal Server Error.
2. RequestLoggingMiddleware
A middleware to log request and response details. It is highly configurable, as it allows injecting a custom logging function.
Behavior:
- Intercepts the request and response to read their bodies.
- Invokes a
writeLogfunction that you pass in the constructor, providing it with theHttpContext, response body, status code and request body. - Also includes its own exception handling, which logs and formats as
ProblemDetails.
3. ServiceFactory
An implementation of the Factory pattern (IServiceFactory) that integrates with the ASP.NET Core dependency injection container. It allows decoupling business logic from direct implementation of IServiceProvider.
Dependencies
- Microsoft.AspNetCore.Http.Abstractions
- Microsoft.AspNetCore.Mvc.Core
- Newtonsoft.Json
- SweetMeSoft.Tools
Installation
dotnet add package SweetMeSoft.Middleware
Usage
Configuration in Startup.cs
You must register the components in your Startup.cs class (or Program.cs in .NET 6+).
using SweetMeSoft.Middleware;
using SweetMeSoft.Middleware.Interface;
using SweetMeSoft.Middleware.Service;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// ... other services
// 1. Register the ServiceFactory
services.AddScoped<IServiceFactory, ServiceFactory>();
// ... register your own services (e.g. IMyService, MyService)
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
// 2. Add middlewares to the pipeline
// Order is important. ErrorHandler usually goes first.
app.UseMiddleware<ErrorHandlerMiddleware>();
// For RequestLoggingMiddleware, you must provide your own logging logic
app.UseMiddleware<RequestLoggingMiddleware>(async (httpContext, responseBody, statusCode, requestBody) =>
{
// Your logging logic here
// Example:
Console.WriteLine($"Request: {requestBody} | Status: {statusCode} | Response: {responseBody}");
await Task.CompletedTask;
});
app.UseRouting();
// ...
}
}
Using IServiceFactory in a Controller
Inject IServiceFactory into your controllers or services to get instances of other services.
using SweetMeSoft.Middleware.Interface;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("[controller]")]
public class MyController : ControllerBase
{
private readonly IMyService myService;
// Inject the factory in the constructor
public MyController(IServiceFactory factory)
{
// Use the factory to get the service you need
this.myService = factory.Get<IMyService>();
}
[HttpGet]
public IActionResult Get()
{
var data = myService.GetData();
return Ok(data);
}
}
Throw Custom Exceptions
From your business logic, you can throw an AppException to generate a controlled 400 Bad Request response.
public class MyService : IMyService
{
public string GetData()
{
// ...
if (string.IsNullOrEmpty(someValue))
{
// This will be caught by ErrorHandlerMiddleware
throw new AppException("The value cannot be null.");
}
// ...
}
}
License
This project is under the MIT license.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. 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. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Microsoft.AspNetCore.Http.Abstractions (>= 2.3.9)
- Microsoft.AspNetCore.Mvc.Core (>= 2.3.9)
- SweetMeSoft.Tools (>= 1.10.132)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.