Custom Utility to Throw Exceptions in ASP .NET Core.
dotnet add package Tungstun.Cute --version 1.0.1
Install-Package Tungstun.Cute -Version 1.0.1
First we need to register the middleware in Program.cs
.
// Program.cs
using DotnetCute.Middleware;
app.UseMiddleware<CuteMiddleWare>();
After registering, every (custom) exception that inherits from the ResponseException
class will be caught in the middleware. A custom exception would look like this:
// SampleException.cs
using DotnetCute.Attributes;
using DotnetCute.Exceptions;
// Note that if no HttpResponseCode is specified, status code 400 (BadRequest) is used.
[HttpResponseCode(Code = HttpStatusCode.NotFound)]
public class SampleException : ResponseException
{
public SampleException(string description, params string[] additional)
: base(description, additional) { }
}
A simple response generated by Cute looks like this:
{
"code": "Sample",
"description": "This is a sample!",
"additional": []
}
A decked out response could look like this, depending on the options provided to the middleware.
{
"Status": 404,
"Error": "Sample",
"Description": "This is a sample!",
"Additional": [],
"Timestamp": "2022-09-13T18:10:23.0785319+02:00",
"Path": "/Sample"
}
To spice up the error response we send back to the client, a CuteOptions
object can be passed along with the registering of the middleware like this:
app.UseMiddleware<CuteMiddleWare>(new CuteOptions()
{
ShowStatusCode = true,
ShowTimeStamp = true,
ShowPath = true,
ShowLogs = true,
ShowStacktrace = false,
});
Option | Effect | Type |
---|---|---|
ShowLogs | Logs the exception thrown, in the dotnet runner log. | boolean |
ShowStatusCode | Creates a status field with the HTTP status code. |
boolean |
ShowTimeStamp | Creates a timestamp field with the current date and time. |
boolean |
ShowPath | Creates a path field with the url path that the error was thrown at. |
boolean |
ShowStacktrace | Creates a stacktrace field with the generated stack trace of the exception. |
boolean |
The additional can be used to return any additional data to the client. All additionals given in the exception will convert to a list.
You can pass additional string data to the exception by adding it at the end like so:
throw new SampleException("This is the description", someString, anotherString, etc...);
An expession as that will come out like:
{
"code": "Sample",
"description": "This is the description",
"additional": [
"Value of someString",
"another value"
]
}