initial commit
This commit is contained in:
72
App_Code/Exceptions/ExceptionMiddleware.cs
Normal file
72
App_Code/Exceptions/ExceptionMiddleware.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Library;
|
||||
|
||||
public class ExceptionMiddleware
|
||||
{
|
||||
private readonly RequestDelegate _next;
|
||||
|
||||
public ExceptionMiddleware( RequestDelegate next )
|
||||
{
|
||||
_next = next;
|
||||
}
|
||||
|
||||
public async Task InvokeAsync( HttpContext httpContext )
|
||||
{
|
||||
try
|
||||
{
|
||||
await _next( httpContext );
|
||||
}
|
||||
catch ( RedirectException exception )
|
||||
{
|
||||
HandleExceptionAsync( httpContext , exception );
|
||||
}
|
||||
catch ( ErrorException exception )
|
||||
{
|
||||
await HandleErrorAsync( httpContext , exception );
|
||||
}
|
||||
catch ( APIErrorException exception )
|
||||
{
|
||||
await HandleApiErrorAsync( httpContext , exception );
|
||||
}
|
||||
catch ( Exception exception )
|
||||
{
|
||||
await HandleExceptionAsync( httpContext , exception );
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleExceptionAsync( HttpContext context , RedirectException exception )
|
||||
{
|
||||
context.Response.Redirect( exception.Destination );
|
||||
}
|
||||
|
||||
private static Task HandleErrorAsync( HttpContext context , ErrorException exception )
|
||||
{
|
||||
context.Response.StatusCode = 500;
|
||||
return context.Response.WriteAsync( exception.ErrorMessage );
|
||||
}
|
||||
private static Task HandleApiErrorAsync( HttpContext context , APIErrorException exception )
|
||||
{
|
||||
using MemoryStream stream = new( );
|
||||
|
||||
using Utf8JsonWriter writer = new( stream );
|
||||
writer.WriteStartObject( );
|
||||
writer.WriteBoolean( "Success" , false );
|
||||
writer.WriteString( "ErrorMessage" , exception.ErrorMessage );
|
||||
writer.WriteEndObject( );
|
||||
writer.Dispose( );
|
||||
|
||||
context.Response.ContentType = System.Net.Mime.MediaTypeNames.Application.Json;
|
||||
return context.Response.WriteAsync( Encoding.UTF8.GetString( stream.ToArray( ) ) );
|
||||
}
|
||||
|
||||
private static Task HandleExceptionAsync( HttpContext context , Exception exception )
|
||||
{
|
||||
context.Response.ContentType = System.Net.Mime.MediaTypeNames.Text.Plain;
|
||||
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
|
||||
return context.Response.WriteAsync( exception.ToString( ) );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user