using Galaeth.ApiServer.Constants;
using Galaeth.Core.Constants;
namespace Galaeth.ApiServer.Middleware;
///
/// Handle status code responses.
///
public class StatusCodeMiddleware
{
private readonly RequestDelegate _next;
///
/// Initializes a new instance of the class.
///
/// Instance of .
public StatusCodeMiddleware(RequestDelegate next)
{
_next = next;
}
///
/// Invoke middleware.
///
/// Instance of .
public Task Invoke(HttpContext context) =>
InvokeAsync(context);
private async Task InvokeAsync(HttpContext context)
{
await _next(context);
switch (context.Response.StatusCode)
{
case 401:
context.Response.Headers.Clear();
context.Response.ContentType = "text/json";
await context.Response.WriteAsJsonAsync(new
{
Success = false,
Error = CoreErrorCodes.Unauthorized,
Message = "You're not authorized to do that",
});
break;
case 404:
context.Response.Headers.Clear();
context.Response.ContentType = "text/json";
await context.Response.WriteAsJsonAsync(new
{
Success = false,
Error = ApiErrorCodes.UnknownMethod,
Message = "Unknown method",
});
break;
case 405:
context.Response.Headers.Clear();
context.Response.ContentType = "text/json";
await context.Response.WriteAsJsonAsync(new
{
Success = false,
Error = ApiErrorCodes.IllegalMethod,
Message = "Illegal method",
});
break;
case 415:
context.Response.Headers.Clear();
context.Response.ContentType = "text/json";
await context.Response.WriteAsJsonAsync(new
{
Success = false,
Error = ApiErrorCodes.UnsupportedBody,
Message = "Unsupported body/media type",
});
break;
case 500:
context.Response.Headers.Clear();
context.Response.ContentType = "text/json";
await context.Response.WriteAsJsonAsync(new
{
Success = false,
Error = ApiErrorCodes.UnknownError,
Message = "Unknown error",
});
break;
}
}
}