Pandatech.ResponseCrafter 2.2.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Pandatech.ResponseCrafter --version 2.2.1                
NuGet\Install-Package Pandatech.ResponseCrafter -Version 2.2.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="Pandatech.ResponseCrafter" Version="2.2.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Pandatech.ResponseCrafter --version 2.2.1                
#r "nuget: Pandatech.ResponseCrafter, 2.2.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 Pandatech.ResponseCrafter as a Cake Addin
#addin nuget:?package=Pandatech.ResponseCrafter&version=2.2.1

// Install Pandatech.ResponseCrafter as a Cake Tool
#tool nuget:?package=Pandatech.ResponseCrafter&version=2.2.1                

Pandatech.ResponseCrafter

Introduction

Pandatech.ResponseCrafter is a comprehensive NuGet package for .NET 8+, specifically designed to enhance exception handling and logging in ASP.NET Core applications. This package simplifies managing standard and custom exceptions by crafting detailed error responses suitable for both development and production environments.

Features

  • Custom Exception Handling: Streamlines the process of managing both standard HTTP exceptions and custom exceptions.
  • Detailed Error Responses: Generates verbose error messages, including stack traces for in-depth debugging in development environments.
  • Environment-Sensitive Logging: Provides flexible logging and response behavior based on visibility settings (Public or Private):
    • Private: All exceptions are sent to the client as defined, and 4xx errors are logged as warnings while 5xx errors are logged as errors.
    • Public: 4xx exceptions are sent to the client as defined, while 5xx errors are concealed with a generic message. Logging remains the same as in Private.
  • Frontend-Friendly Error Messages: Supports converting error messages to your desired case convention, facilitating easier integration with frontend localization systems.
  • Standardized Error Responses: Provides a standardized error response format, making it easier for frontend applications to parse and display error messages. The error response format is shown below:
{
  "TraceId": "0HMVFE0A284AM:00000001",
  "Instance": "POST - 164.54.144.23:443/users/register",
  "StatusCode": 400,
  "Type": "BadRequestException",
  "Errors": {
    "email": "email_address_is_not_in_a_valid_format",
    "password": "password_must_be_at_least_8_characters_long"
  },
  "Message": "the_request_was_invalid_or_cannot_be_otherwise_served."
}

Installation

Install the package via NuGet Package Manager or use the following command:

Install-Package ResponseCrafter

Usage

1. Setup Exception Handlers:

Add AddResponseCrafter in program.cs bby providing an optional naming convention, and configure ResponseCrafterVisibility in your settings.

var builder = WebApplication.CreateBuilder(args);

// Basic setup
builder.AddResponseCrafter();

// Setup with a specific naming convention
builder.AddResponseCrafter(NamingConvention.ToSnakeCase);

var app = builder.Build();
app.UseResponseCrafter();
app.Run();

Configure visibility in your appsettings.json:

{
  "ResponseCrafterVisibility": "Public"
}

Supported naming conventions:

public enum NamingConvention
{
    Default = 0,
    ToSnakeCase = 1,
    ToPascalCase = 2,
    ToCamelCase = 3,
    ToKebabCase = 4,
    ToTitleCase = 5,
    ToHumanCase = 6
}

2. Define Custom Exceptions:

Create custom exception classes that inherit from ApiException or use the predefined ones. Use ErrorDetails records for specific error messages related to API requests.

3. Configure Middleware:

  • Implement the exception handling middleware in your application's pipeline.
app.UseResponseCrafter();

4. Logging and Error Responses:

The package automatically logs warnings or errors and provides crafted responses based on the exception type.

Custom HTTP Exception Already Created

  • BadRequestException
  • UnauthorizedException
  • PaymentRequiredException
  • ForbiddenException
  • NotFoundException
  • ConflictException
  • TooManyRequestsException
  • InternalServerErrorException
  • ServiceUnavailableException

Custom Exception Helper Methods

Using exception helpers:

decimal? price = -10.5m;
//For 400 Bad Request
BadRequestException.ThrowIfNullOrNegative(price, "Price is negative");
//For 500 Internal Server Error
InternalServerErrorException.ThrowIfNullOrNegative(price, "Price is negative");

string? username = "   ";
//For 400 Bad Request
BadRequestException.ThrowIfNullOrWhiteSpace(username, "Please provide username");
//For 404 Not Found
NotFoundException.ThrowIfNullOrWhiteSpace(username);
//For 500 Internal Server Error
InternalServerErrorException.ThrowIfNullOrWhiteSpace(username, "Price is negative");

List<string?>? tags = new List<string?> { "tag1", " ", null };
//For 400 Bad Request
BadRequestException.ThrowIfNullOrWhiteSpace(tags);
//For 404 Not Found
NotFoundException.ThrowIfNullOrWhiteSpace(tags);
//For 500 Internal Server Error
InternalServerErrorException.ThrowIfNullOrWhiteSpace(tags);

object? user = null;
//For 400 Bad Request
BadRequestException.ThrowIfNull(user, "Please provide user");
//For 404 Not Found
NotFoundException.ThrowIfNull(user, "Please provide user");
//For 500 Internal Server Error
InternalServerErrorException.ThrowIfNull(user, "Please provide user");

bool userUnauthorized = false;
//For 401 Unauthorized
UnauthorizedException.ThrowIf(userUnauthorized, "User is unauthorized");
//For 500 Internal Server Error
InternalServerErrorException.ThrowIf(userUnauthorized, "User is unauthorized");

These examples show how to use the ThrowIfNullOrNegative, ThrowIfNullOrWhiteSpace, and ThrowIfNull helper methods from BadRequestException, InternalServerErrorException and NotFoundException. Adjust the object names and values according to your specific application needs.

Recommendations

  • Error Message Formatting: It's recommended to use snake_case for error messages to aid frontend applications in implementing localization.

Limitations

  • This package is specifically tailored for .NET 8 and above.

License

Pandatech.ResponseCrafter is licensed under the MIT License.

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. 
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
4.0.1 81 11/11/2024
4.0.0 92 10/4/2024
3.0.1 125 9/11/2024
3.0.0 106 7/18/2024
2.2.2 112 6/29/2024
2.2.1 111 6/29/2024
2.2.0 114 6/27/2024
2.1.4 114 6/27/2024
2.1.3 145 6/22/2024
2.1.2 90 6/22/2024
2.1.1 96 6/22/2024
2.1.0 96 6/22/2024
2.0.0 107 6/13/2024
1.7.0 90 6/13/2024
1.6.3 98 6/9/2024
1.6.2 104 6/6/2024
1.6.1 122 6/2/2024
1.5.1 112 5/28/2024
1.5.0 111 5/26/2024
1.4.14 115 5/24/2024
1.4.13 97 5/24/2024
1.4.12 108 5/17/2024
1.4.10 122 5/8/2024
1.4.9 129 5/7/2024
1.4.8 108 5/6/2024
1.4.7 120 5/5/2024
1.4.6 81 5/3/2024
1.4.5 118 4/24/2024
1.4.4 113 4/24/2024
1.4.3 109 4/24/2024
1.4.2 107 4/23/2024
1.4.1 128 4/16/2024
1.4.0 119 4/16/2024
1.3.0 108 4/16/2024
1.2.1 140 4/3/2024
1.2.0 144 4/2/2024
1.1.0 171 3/22/2024
1.0.4 318 12/14/2023
1.0.3 153 11/29/2023
1.0.2 143 11/29/2023
1.0.1 133 11/28/2023
1.0.0 150 11/28/2023

Exception extension compiler enhancment and new features has been added