FS.AspNetCore.ResponseWrapper
10.0.2
dotnet add package FS.AspNetCore.ResponseWrapper --version 10.0.2
NuGet\Install-Package FS.AspNetCore.ResponseWrapper -Version 10.0.2
<PackageReference Include="FS.AspNetCore.ResponseWrapper" Version="10.0.2" />
<PackageVersion Include="FS.AspNetCore.ResponseWrapper" Version="10.0.2" />
<PackageReference Include="FS.AspNetCore.ResponseWrapper" />
paket add FS.AspNetCore.ResponseWrapper --version 10.0.2
#r "nuget: FS.AspNetCore.ResponseWrapper, 10.0.2"
#:package FS.AspNetCore.ResponseWrapper@10.0.2
#addin nuget:?package=FS.AspNetCore.ResponseWrapper&version=10.0.2
#tool nuget:?package=FS.AspNetCore.ResponseWrapper&version=10.0.2
FS.AspNetCore.ResponseWrapper
Enterprise-grade API response wrapper for ASP.NET Core - standardize your APIs with zero code changes.
Transform your raw controller responses into rich, metadata-enhanced API responses automatically. Add comprehensive error handling, request tracking, pagination support, and enterprise features without modifying existing code.
π― Why Use This?
Problem: Your API returns inconsistent response formats, lacks proper error handling, and provides no request tracking or metadata.
Solution: Add one NuGet package and 2 lines of code - get enterprise-grade API responses automatically.
// Before
public async Task<User> GetUser(int id) => await _userService.GetUserAsync(id);
// After (no code changes needed!)
public async Task<User> GetUser(int id) => await _userService.GetUserAsync(id);
Automatic transformation:
{
"success": true,
"data": { "id": 1, "name": "John Doe" },
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2025-01-15T10:30:45.123Z",
"executionTimeMs": 42,
"path": "/api/users/1",
"method": "GET"
}
}
β¨ Key Features
- β Zero Code Changes - Works with existing controllers automatically
- π Automatic Response Wrapping - Consistent format for all endpoints
- π¨ Global Error Handling - 12 built-in exception types with error codes
- β±οΈ Performance Monitoring - Automatic execution time tracking
- π Universal Pagination - Works with ANY pagination library (duck typing)
- π·οΈ Smart Metadata Extraction - StatusCode, Message, and custom metadata
- π Request Tracing - Correlation IDs for distributed systems
- ποΈ Highly Configurable - Control every aspect of wrapping behavior
- π‘οΈ Production-Ready - .NET 10.0 support, minimal overhead
π¦ Quick Start
1. Install Package
dotnet add package FS.AspNetCore.ResponseWrapper
2. Configure (2 lines of code)
// Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddResponseWrapper(); // π Line 1
var app = builder.Build();
app.UseMiddleware<GlobalExceptionHandlingMiddleware>(); // π Line 2 (optional but recommended)
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
3. That's It! π
Your existing controllers now return wrapped responses automatically:
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
[HttpGet("{id}")]
public async Task<User> GetUser(int id)
{
var user = await _userService.GetUserAsync(id);
if (user == null)
throw new NotFoundException("User", id);
return user;
}
}
Success Response:
{
"success": true,
"data": { "id": 1, "name": "John Doe", "email": "john@example.com" },
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2025-01-15T10:30:45.123Z",
"executionTimeMs": 42
}
}
Error Response:
{
"success": false,
"data": null,
"message": "The requested item could not be found",
"statusCode": "NOT_FOUND",
"errors": ["User (123) was not found."],
"metadata": {
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2025-01-15T10:32:15.456Z"
}
}
π Documentation
Core Package
- π Getting Started Guide - Step-by-step setup and basic usage
- π§ Core Features - Response structure, interfaces, error handling
- π Pagination Support - Universal pagination with any library
- βοΈ Configuration Guide - All configuration options explained
- π‘ Examples - Real-world usage examples
- π Troubleshooting - Common issues and solutions
Enterprise Extensions
- π Enterprise Features Overview - All enterprise packages
- π OpenAPI Integration - Swagger, NSwag, Scalar support
- π OpenTelemetry & Tracing - Distributed tracing and metrics
- β‘ Caching & Performance - Memory, Redis, SQL Server caching
- π Data Transformation - Masking, field selection, GDPR
- π¨ Preset Configurations - Quick setup for common scenarios
π― Common Use Cases
Basic API with Error Handling
builder.Services.AddResponseWrapper();
app.UseMiddleware<GlobalExceptionHandlingMiddleware>();
API with Pagination
// Works automatically with ANY pagination library!
[HttpGet]
public async Task<PagedResult<Product>> GetProducts(int page = 1)
=> await _service.GetPagedAsync(page, 20);
API with Custom Status Codes
public class LoginResult : IHasStatusCode, IHasMessage
{
public string Token { get; set; }
public string StatusCode { get; set; } = "LOGIN_SUCCESS";
public string Message { get; set; } = "Welcome back!";
}
Enterprise API with All Features
// Install meta package
dotnet add package FS.AspNetCore.ResponseWrapper.Extensions
// One-line setup
builder.Services.AddResponseWrapperWithPreset(PresetType.Enterprise, "MyAPI");
app.UseResponseWrapperExtensions();
π’ Enterprise Features
Install the all-in-one enterprise package:
dotnet add package FS.AspNetCore.ResponseWrapper.Extensions
Includes:
- π OpenAPI Integration - Swashbuckle, NSwag, Scalar with enhanced schemas
- π OpenTelemetry - W3C trace context, distributed tracing, custom metrics
- β‘ Caching - Memory, Redis, SQL Server with ETag support
- π Transformation - Data masking (PII protection), field selection, GDPR compliance
- π¨ Presets - 9 pre-configured setups (Minimal, Basic, Standard, Advanced, Enterprise, GDPR, Performance, Development, Production)
Quick Enterprise Setup:
// One line gets you everything
builder.Services.AddResponseWrapperWithPreset(PresetType.Enterprise, "MyAPI");
app.UseResponseWrapperExtensions();
See Enterprise Features Documentation for details.
ποΈ Configuration Example
builder.Services.AddResponseWrapper(options =>
{
// Enable/disable features
options.EnableExecutionTimeTracking = true;
options.EnablePaginationMetadata = true;
options.EnableCorrelationId = true;
// Exclude specific endpoints
options.ExcludedPaths = new[] { "/health", "/metrics" };
// Customize error messages
}, errorMessages =>
{
errorMessages.ValidationErrorMessage = "Please check your input";
errorMessages.NotFoundErrorMessage = "Item not found";
});
π¨ Built-in Exception Types
12 exception types with automatic error code extraction:
ValidationException- Input validation errors (400)NotFoundException- Resource not found (404)BusinessException- Business rule violations (400)ConflictException- Resource conflicts (409)UnauthorizedException- Authentication required (401)ForbiddenAccessException- Authorization failed (403)BadRequestException- Invalid requests (400)TimeoutException- Operation timeout (408)TooManyRequestsException- Rate limiting (429)ServiceUnavailableException- Service down (503)CustomHttpStatusException- Any custom status codeApplicationExceptionBase- Base for custom exceptions
All exceptions include automatic error codes for client-side handling.
π Response Structure
{
"success": true, // Operation outcome
"data": { ... }, // Your business data
"message": "...", // Optional message
"statusCode": "...", // Application status code
"errors": [...], // Error messages (if any)
"metadata": { // Request metadata
"requestId": "...", // Unique request ID
"timestamp": "...", // Response timestamp
"executionTimeMs": 42, // Execution time
"correlationId": "...", // Distributed tracing
"path": "/api/users", // Request path
"method": "GET", // HTTP method
"pagination": { ... }, // Pagination info (if applicable)
"additional": { ... } // Custom metadata
}
}
π§ Requirements
- .NET 10.0 or later
- ASP.NET Core Web API project
π License
MIT License - see LICENSE file for details.
π€ Contributing
Contributions are welcome! Please read our Contributing Guide for details.
π Support & Links
- Documentation: GitHub Repository
- NuGet Package: FS.AspNetCore.ResponseWrapper
- Issues: Report bugs or request features
- Enterprise Package: FS.AspNetCore.ResponseWrapper.Extensions
π What's Next?
- β Install the package
- π Read the Getting Started Guide
- π‘ Check out Examples
- π Explore Enterprise Features
Made with β€οΈ by Furkan SarΔ±kaya
Transform your ASP.NET Core APIs with enterprise-grade response wrapping. Install today and elevate your API development!
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. 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. |
-
net10.0
- FluentValidation (>= 12.1.1)
- Microsoft.EntityFrameworkCore.Abstractions (>= 10.0.1)
- Microsoft.EntityFrameworkCore.Relational (>= 10.0.1)
NuGet packages (7)
Showing the top 5 NuGet packages that depend on FS.AspNetCore.ResponseWrapper:
| Package | Downloads |
|---|---|
|
FS.AspNetCore.ResponseWrapper.OpenApi.Swashbuckle
Swashbuckle/OpenAPI extension for FS.AspNetCore.ResponseWrapper. Provides automatic OpenAPI schema generation for wrapped responses. Includes pre-built error response examples (400, 404, 500) and complete metadata schemas. Makes wrapped API responses fully discoverable in Swagger UI. |
|
|
FS.AspNetCore.ResponseWrapper.OpenApi.Scalar
Scalar API documentation extension for FS.AspNetCore.ResponseWrapper. Provides optimized configuration for Scalar API documentation with wrapped responses. Includes theme and display settings optimized for ResponseWrapper schemas. |
|
|
FS.AspNetCore.ResponseWrapper.OpenTelemetry
OpenTelemetry and distributed tracing integration for FS.AspNetCore.ResponseWrapper. Provides automatic trace context propagation, activity enrichment, and custom metrics for observability. |
|
|
FS.AspNetCore.ResponseWrapper.Transformation
Response data transformation and filtering for FS.AspNetCore.ResponseWrapper. Provides field selection, data masking for PII/sensitive data, and custom transformations. |
|
|
FS.AspNetCore.ResponseWrapper.OpenApi.NSwag
NSwag/OpenAPI extension for FS.AspNetCore.ResponseWrapper. Provides automatic OpenAPI schema generation for wrapped responses. Includes pre-built error response examples (400, 404, 500) and complete metadata schemas. Makes wrapped API responses fully discoverable in NSwag UI. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version 10.0.2: Added extensibility framework for enterprise features. Introduced three new interfaces (IResponseEnricher, IMetadataProvider, IResponseTransformer) that enable extension packages to enhance responses, inject custom metadata, and transform data before wrapping. This backward-compatible update provides foundation for upcoming extension packages including OpenAPI/Swagger integration, OpenTelemetry tracing, HTTP caching, and response transformation capabilities. Zero breaking changes - existing applications continue to work without modifications.