practicekea_backend/microservices/institute/ErrorHandlingMiddleware.cs

73 lines
2.7 KiB
C#
Raw Permalink Normal View History

2024-12-02 13:24:34 +00:00
using System;
using System.Net;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using OnlineAssessment.Common;
namespace OnlineAssessment
{
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate next;
public ErrorHandlingMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context /* other dependencies */)
{
try
{
await next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}
private static Task HandleExceptionAsync(HttpContext context, Exception ex)
{
var code = HttpStatusCode.InternalServerError; // 500 if unexpected
if (ex is FormatException) code = HttpStatusCode.BadRequest;
else if (ex is InvalidOperationException) code = HttpStatusCode.BadRequest;
else if (ex is UriFormatException) code = HttpStatusCode.RequestUriTooLong;
else if (ex is UnauthorizedAccessException) code = HttpStatusCode.Unauthorized;
else if (ex is ArgumentNullException) code = HttpStatusCode.BadRequest;
else if (ex is ArgumentException) code = HttpStatusCode.BadRequest;
else if (ex is WebException) code = HttpStatusCode.BadRequest;
else if (ex is EntryPointNotFoundException) code = HttpStatusCode.NotFound;
//else if (ex is ValueNotAcceptedException) code = HttpStatusCode.NotAcceptable;
//else if (ex is UnauthorizedException) code = HttpStatusCode.Unauthorized;
string retStatusMessage = string.Empty;
string retStatusCode = (((int)code) * -1).ToString();
if (ex.InnerException != null && ex.InnerException.Message.Length > 0)
{
retStatusMessage = string.Concat(ex.Message, " InnerException :- ", ex.InnerException.Message);
}
else
{
retStatusMessage = ex.Message;
}
ReturnResponse returnResponse = new ReturnResponse();
ReturnStatus retStatus = new ReturnStatus(retStatusCode, retStatusMessage);
returnResponse.Result = new object();
returnResponse.Status = retStatus;
//var result = JsonConvert.SerializeObject(new { code, error = ex.Message });
var result = JsonConvert.SerializeObject(returnResponse);
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)code;
return context.Response.WriteAsync(result);
}
}
}