ExceptionToProblemDetails.Generator
1.4.2
dotnet add package ExceptionToProblemDetails.Generator --version 1.4.2
NuGet\Install-Package ExceptionToProblemDetails.Generator -Version 1.4.2
<PackageReference Include="ExceptionToProblemDetails.Generator" Version="1.4.2" />
paket add ExceptionToProblemDetails.Generator --version 1.4.2
#r "nuget: ExceptionToProblemDetails.Generator, 1.4.2"
// Install ExceptionToProblemDetails.Generator as a Cake Addin #addin nuget:?package=ExceptionToProblemDetails.Generator&version=1.4.2 // Install ExceptionToProblemDetails.Generator as a Cake Tool #tool nuget:?package=ExceptionToProblemDetails.Generator&version=1.4.2
Versions
1.4.2 - the MapToProblemDetails attribute could be placed on base class
1.4 - introduced attribute ExceptionMapClass
1.2 - removed reference to Microsoft.AspNetCore.Mvc.Core
In English - bellow
Motyvacija
Susieti OPEN API dokumentaciją su standartizuotų klaidų apdorojimu ProblemDetails.
Pastaba - turi būti kartu naudojamas su kokiu nors ProblemDetails paketu, pvz.:
Naudojimas
1. Prisidėti paketą package
Install-Package ExceptionToProblemDetails
.NET Core command line interface:
dotnet add package ExceptionToProblemDetails
2. Prisidėti source code generatoriaus paketą package
Install-Package ExceptionToProblemDetails.Generator
.NET Core command line interface:
dotnet add package ExceptionToProblemDetails.Generator
3. Susikurti partial klasę ir dekoruoti ją atributu [ExceptionMapClass], kuri užregistruos middleware Exception mapper
Žemiau pateiktas pavyzdys, registruojantis Hellang.Middleware.ProblemDetails middleware
[ExceptionMapClass]
public partial class ExceptionToProblemDetailsMap
{
private readonly ProblemDetailsOptions options;
public ExceptionToProblemDetailsMap(ProblemDetailsOptions options)
{
this.options = options;
}
partial void MapConverter<TConverter, TException, TProblemDetails>(int statusCode, ExceptionToProblemDetails.ControllerActionDefinition actionDefinition) where TConverter : ExceptionToProblemDetails.IExceptionToProblemDetailsConverter<TException, TProblemDetails> where TException : System.Exception where TProblemDetails : Microsoft.AspNetCore.Mvc.ProblemDetails
{
var converter = Activator.CreateInstance<TConverter>();
options.Map<TException>((context, exception)=>actionDefinition.MatchRoute(context.Request.RouteValues),
(context, exception) => converter.Convert(exception, statusCode));
}
}
4. Dekoruoti controller klasės arba action metodus atributu [MapToProblemDetails]
[HttpGet("{location}")]
[ProducesResponseType(typeof(IEnumerable<WeatherForecast> ),StatusCodes.Status200OK )]
[MapToProblemDetails(StatusCodes.Status404NotFound, ExceptionType = typeof(NotFoundException))]
public IEnumerable<WeatherForecast> Get(string location)
{
Source generatorius sugeneruos 3 žingsnyje apsirašytos partial klasės iškvietimus
5. Naudojant jums patinkantį ProblemDetails middleware užregistruoti Exception mapper
builder.Services.AddProblemDetails(options =>
{
new ExceptionToProblemDetailsMap(options).Map();
options.IncludeExceptionDetails = (context, exception) => false;
});
Pavyzdžiai pateikti pavyzdiniai projektai
<a id="Motivation"></a>
Motivation
Tie the Open API documentation to standardized error handling with ProblemDetails.
Note - Must be used along with a ProblemDetails package such as:
[Opw.HttpExceptions.AspNetCore] (https://www.nuget.org/packages/Opw.HttpExceptions.AspNetCore/)
[Hellang.Middleware.ProblemDetails] (https://www.nuget.org/packages/Hellang.Middleware.ProblemDetails/)
Usage
1. Add the package
Install-Package ExceptionToProblemDetails
.NET Core command line interface:
dotnet add package ExceptionToProblemDetails
2. Add the source code generator package
Install-Package ExceptionToProblemDetails.Generator
.NET Core command line interface:
dotnet add package ExceptionToProblemDetails.Generator
3. Create a partial class and decorate it with attribute [ExceptionMapClass], which will register the Exception mapper middleware
Below is an example registering the Hellang.Middleware.ProblemDetails middleware.
[ExceptionMapClass]
public partial class ExceptionToProblemDetailsMap
{
private readonly ProblemDetailsOptions options;
public ExceptionToProblemDetailsMap(ProblemDetailsOptions options)
{
this.options = options;
}
partial void MapConverter<TConverter, TException, TProblemDetails>(int statusCode, ExceptionToProblemDetails.ControllerActionDefinition actionDefinition) where TConverter : ExceptionToProblemDetails.IExceptionToProblemDetailsConverter<TException, TProblemDetails> where TException : System.Exception where TProblemDetails : Microsoft.AspNetCore.Mvc.ProblemDetails
{
var converter = Activator.CreateInstance<TConverter>();
options.Map<TException>((context, exception)=>actionDefinition.MatchRoute(context.Request.RouteValues),
(context, exception) => converter.Convert(exception, statusCode));
}
}
4. Decorate the controller class or action methods with the [MapToProblemDetails] attribute.
[HttpGet("{location}")]
[ProducesResponseType(typeof(IEnumerable<WeatherForecast> ),StatusCodes.Status200OK )]
[MapToProblemDetails(StatusCodes.Status404NotFound, ExceptionType = typeof(NotFoundException))]
public IEnumerable<WeatherForecast> Get(string location)
{
The source generator will generate the calls described in step 3.
5. Using your preferred ProblemDetails middleware, register the Exception mapper.
builder.Services.AddProblemDetails(options =>
{
new ExceptionToProblemDetailsMap(options).Map();
options.IncludeExceptionDetails = (context, exception) => false;
});
Examples can be found in the sample project
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- Microsoft.CodeAnalysis.CSharp (>= 4.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.