#define FIRST // FIRST MIDDLEWARE #if NEVER #elif FIRST // using Microsoft.AspNetCore.Http.Features; var builder = WebApplication.CreateBuilder(args); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddProblemDetails(options => options.CustomizeProblemDetails = (context) => { var mathErrorFeature = context.HttpContext.Features .GetRequiredFeature(); (string Detail, string Type) details = mathErrorFeature.MathError switch { MathErrorType.DivisionByZeroError => ("Divison by zero is not defined.", "https://wikipedia.org/wiki/Division_by_zero"), _ => ("Negative or complex numbers are not valid input.", "https://wikipedia.org/wiki/Square_root") }; context.ProblemDetails.Type = details.Type; context.ProblemDetails.Title = "Wrong Input"; context.ProblemDetails.Detail = details.Detail; }); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); // Middleware to handle writing problem details to the response app.Use(async (context, next) => { var mathErrorFeature = new MathErrorFeature(); context.Features.Set(mathErrorFeature); await next(context); }); app.UseStatusCodePages(); // /divide?numerator=2&denominator=4 app.MapGet("/divide", (HttpContext context, double numerator, double denominator) => { if (denominator == 0) { context.Features.GetRequiredFeature().MathError = MathErrorType.DivisionByZeroError; return Results.BadRequest(); } var calculation = numerator / denominator; return Results.Ok(calculation); }); // /squareroot?radicand=16 app.MapGet("/squareroot", (HttpContext context, int radicand) => { if (radicand < 0) { context.Features.GetRequiredFeature().MathError = MathErrorType.NegativeRadicandError; return Results.BadRequest(); } var calculation = Math.Sqrt(radicand); return Results.Ok(calculation); }); app.Run(); // #elif MIDDLEWARE using Microsoft.AspNetCore.Http.Features; var builder = WebApplication.CreateBuilder(args); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddProblemDetails(options => options.CustomizeProblemDetails = (context) => { var mathErrorFeature = context.HttpContext.Features .GetRequiredFeature(); (string Detail, string Type) details = mathErrorFeature.MathError switch { MathErrorType.DivisionByZeroError => ("Divison by zero is not defined.", "https://wikipedia.org/wiki/Division_by_zero"), _ => ("Negative or complex numbers are not valid input.", "https://wikipedia.org/wiki/Square_root") }; context.ProblemDetails.Type = details.Type; context.ProblemDetails.Title = "Wrong Input"; context.ProblemDetails.Detail = details.Detail; }); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); // Middleware to handle writing problem details to the response app.Use(async (context, next) => { var mathErrorFeature = new MathErrorFeature(); context.Features.Set(mathErrorFeature); await next(context); }); app.UseStatusCodePages(); // /divide?numerator=2&denominator=4 app.MapGet("/divide", (HttpContext context, double numerator, double denominator) => { if (denominator == 0) { context.Features.GetRequiredFeature().MathError = MathErrorType.DivisionByZeroError; return Results.BadRequest(); } var calculation = numerator / denominator; return Results.Ok(calculation); }); // /squareroot?radicand=16 app.MapGet("/squareroot", (HttpContext context, int radicand) => { if (radicand < 0) { context.Features.GetRequiredFeature().MathError = MathErrorType.NegativeRadicandError; return Results.BadRequest(); } var calculation = Math.Sqrt(radicand); return Results.Ok(calculation); }); app.Run(); #endif