summary refs log tree commit diff
path: root/MxApiExtensions/Program.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MxApiExtensions/Program.cs')
-rw-r--r--MxApiExtensions/Program.cs47
1 files changed, 42 insertions, 5 deletions
diff --git a/MxApiExtensions/Program.cs b/MxApiExtensions/Program.cs

index cdbdb59..72a5dc9 100644 --- a/MxApiExtensions/Program.cs +++ b/MxApiExtensions/Program.cs
@@ -1,4 +1,7 @@ +using System.Net.Mime; +using LibMatrix; using LibMatrix.Services; +using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Http.Timeouts; using MxApiExtensions; using MxApiExtensions.Classes.LibMatrix; @@ -8,9 +11,7 @@ var builder = WebApplication.CreateBuilder(args); // Add services to the container. -builder.Services.AddControllers().AddJsonOptions(options => { - options.JsonSerializerOptions.WriteIndented = true; -}); +builder.Services.AddControllers().AddJsonOptions(options => { options.JsonSerializerOptions.WriteIndented = true; }); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); @@ -47,6 +48,13 @@ builder.Services.AddRequestTimeouts(x => { }; }); +// builder.Services.AddCors(x => x.AddDefaultPolicy(y => y.AllowAnyHeader().AllowCredentials().AllowAnyOrigin().AllowAnyMethod())); +builder.Services.AddCors(options => { + options.AddPolicy( + "Open", + policy => policy.AllowAnyOrigin().AllowAnyHeader()); +}); + var app = builder.Build(); // Configure the HTTP request pipeline. @@ -56,9 +64,38 @@ if (app.Environment.IsDevelopment()) { } // app.UseHttpsRedirection(); +app.UseCors("Open"); + +app.UseExceptionHandler(exceptionHandlerApp => +{ + exceptionHandlerApp.Run(async context => + { + + var exceptionHandlerPathFeature = + context.Features.Get<IExceptionHandlerPathFeature>(); + + if (exceptionHandlerPathFeature?.Error is MatrixException mxe) { + context.Response.StatusCode = mxe.ErrorCode switch { + "M_NOT_FOUND" => StatusCodes.Status404NotFound, + _ => StatusCodes.Status500InternalServerError + }; + context.Response.ContentType = MediaTypeNames.Application.Json; + await context.Response.WriteAsync(mxe.GetAsJson()!); + } + else { + context.Response.StatusCode = StatusCodes.Status500InternalServerError; + context.Response.ContentType = MediaTypeNames.Application.Json; + await context.Response.WriteAsync(new MxApiMatrixException() { + ErrorCode = "M_UNKNOWN", + Error = exceptionHandlerPathFeature?.Error.ToString() + }.GetAsJson()); + } + }); +}); + -app.UseAuthorization(); +// app.UseAuthorization(); app.MapControllers(); -app.Run(); +app.Run(); \ No newline at end of file