Skip to content

Exception handling features

The Suite Framework provides features to handle exceptions that occurs in the ASP.NET Core execution pipeline gracefully.

The implementation adheres to the RFC7807 - Problem Details for HTTP APIs, which uses a ProblemDetails object to wrap up the exception coming from the underlying execution pipeline.

By using this feature the developer gets always a consistent error representation, no matter what kind of exception was raised by the upstream ASP.NET Core processing pipeline.

Unique identifiers

To have a better compliance with the RFC7807, each exception type must have an unique identifier, so that client applications can uniquely differentiate them, and take specific actions based on it. This identifier is mapped to the Type attribute of the ProblemDetails error instance, this type must be a valid Uri type.

The Suite Framework will automatically generate the Type based on configurable base Uri plus the exception type. The resulting Type looks like:

JSON
    "type": "http://itsynch.com/suite/errors/Exception"

The Base Url for the exception type construction can be configured by setting the desired value to the exception handling module options ProblemDetailsTypeBaseUri property.

Note

This Base Url will most likely be configured on a host or global basis and you do not need to worry about it.

Exceptions providing Code

Some exceptions define a Code attribute to provide more information about the exception, such as BusinessException. For any exception implementing IHasErrorCode the Code attribute will be mapped as suffix for the Type attribute of the ProblemDetails entity as we have seen right before.

JSON
    "type": "http://itsynch.com/suite/errors/BusinessException/BS-0001",

Localizable title and detail

The Suite Framework allow us to make the exceptions localizable, not only the message but the details as well.

Extra data

Following the recommendations of the RFC, the exceptions can provide extra data regarding the error or the context in which the exception has been thrown. Any extra data value supplied with the exception will be pushed into the resulting ProblemDetails error object. The following example shows the extra data attributes.

JSON
1
2
3
4
5
6
7
8
{
    "type": "http://itsynch.com/suite/errors/BusinessException/BS-0001",
    "title": "This business exception has been thrown at 14:03:50.7829539 !",
    "status": 403,
    "detail": "This is the localized explanation of the exception.",
    "someId": "00000000-0000-0000-0000-000000000000",
    "someText": "Some additional text"
}

Detailed error information in development environment

In development environment the Suite Framework will supply the detailed exception information in the ErrorDetail attribute of the resulting ProblemDetail error object.

  1. Exception Handling Module