CodeMe.ServiceErrors
0.0.2
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package CodeMe.ServiceErrors --version 0.0.2
NuGet\Install-Package CodeMe.ServiceErrors -Version 0.0.2
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="CodeMe.ServiceErrors" Version="0.0.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CodeMe.ServiceErrors" Version="0.0.2" />
<PackageReference Include="CodeMe.ServiceErrors" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CodeMe.ServiceErrors --version 0.0.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: CodeMe.ServiceErrors, 0.0.2"
#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.
#:package CodeMe.ServiceErrors@0.0.2
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CodeMe.ServiceErrors&version=0.0.2
#tool nuget:?package=CodeMe.ServiceErrors&version=0.0.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
CodeMe.ServiceErrors
CodeMe.ServiceErrors is a library for describing service-level errors as first-class values and turning them into serializable payloads or exceptions. It is designed for APIs, background services, and distributed systems where you want a stable error contract across app boundaries.
Minimal example
Handling the errors:
using CodeMe.ServiceErrors;
// Error URI: problem://orders-api/orders/order-not-found, status 404
var descriptor = ErrorDescriptor.NotFound(
group: ErrorGroupUri.Create("problem", "orders-api", "orders"),
code: "order-not-found");
var error = new ServiceError(descriptor, "Order 66 was not found");
// ...
if (error.Matches(descriptor))
{
// handle the error
}
Well-known errors, conversions and DI registration:
using CodeMe.ServiceErrors;
using CodeMe.ServiceErrors.DependencyInjection;
using CodeMe.ServiceErrors.Serializable;
using Microsoft.Extensions.DependencyInjection;
using static WellKnownOrderApiErrors;
var services = new ServiceCollection();
services
.AddServiceErrors(RootGroup)
.Add(typeof(WellKnownOrderApiErrors));
using var provider = services.BuildServiceProvider();
var errorFactory = provider.GetRequiredService<IServiceErrorFactory>();
ServiceError error = new ServiceError(OrderNotFound, "Order 42 was not found");
ServiceErrorDto dto = errorFactory.CreateDto(error);
ServiceError errorFromDto = errorFactory.CreateError(dto);
// DTO content in JSON format:
// {
// "scheme": "problem",
// "application": "orders-api",
// "category": "orders",
// "code": "order-not-found",
// "statusCode": "NotFound",
// "message": "Order 42 was not found"
// }
// returns OrderNotFoundException
IServiceException exception = errorFactory.CreateException(errorFromDto);
ServiceError errorFromException = exception.Error;
[ServiceErrors]
internal static class WellKnownOrderApiErrors
{
public static readonly ErrorGroupUri RootGroup = ErrorGroupUri.Create("problem", "orders-api");
public static readonly ErrorGroupUri OrdersGroup = RootGroup.SubGroup("orders");
[ServiceException<OrderNotFoundException>]
public static readonly ErrorDescriptor OrderNotFound =
ErrorDescriptor.NotFound(OrdersGroup, "order-not-found");
}
internal sealed class OrderNotFoundException : ServiceException
{
public OrderNotFoundException(ServiceError error)
: base(AssertMatches(OrderNotFound, error))
{
}
public OrderNotFoundException(string message, Exception? innerException = null)
: base(OrderNotFound, message, innerException)
{
}
}
| 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net10.0
- CodeMe.ServiceErrors.Abstractions (>= 0.0.2)
- Microsoft.Extensions.Options (>= 10.0.9)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.