add extra custom exception

This commit is contained in:
2025-09-29 14:47:10 +03:30
parent f5c3e6351c
commit 7725384a87
3 changed files with 33 additions and 21 deletions

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
namespace _0_Framework.Exceptions;
@@ -14,16 +15,13 @@ public class BadRequestException:Exception
Details = details;
}
public string Details { get; }
}
public class SmsServiceException:BadRequestException
{
public SmsServiceException(string message, int expireTime) : base(message)
public BadRequestException(string message, Dictionary<string, object?> extra) :
base(message)
{
ExpireTime = expireTime;
Extra = extra;
}
public int ExpireTime { get; set; }
public string Details { get; }
public Dictionary<string,object> Extra { get; set; }
}

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Diagnostics;
@@ -24,37 +25,42 @@ public class CustomExceptionHandler : IExceptionHandler
"Error Message: {exceptionMessage}, Time of occurrence {time}",
exception.Message, DateTime.UtcNow);
(string Detail, string Title, int StatusCode) details = exception switch
(string Detail, string Title, int StatusCode, Dictionary<string, object>? Extra) details = exception switch
{
InternalServerException =>
(
exception.Message,
exception.GetType().Name,
context.Response.StatusCode = StatusCodes.Status500InternalServerError
context.Response.StatusCode = StatusCodes.Status500InternalServerError,
null
),
BadRequestException =>
BadRequestException bre =>
(
exception.Message,
exception.GetType().Name,
context.Response.StatusCode = StatusCodes.Status400BadRequest
context.Response.StatusCode = StatusCodes.Status400BadRequest,
bre.Extra
),
NotFoundException =>
(
exception.Message,
exception.GetType().Name,
context.Response.StatusCode = StatusCodes.Status404NotFound
context.Response.StatusCode = StatusCodes.Status404NotFound,
null
),
UnAuthorizeException =>
(
exception.Message,
exception.GetType().Name,
context.Response.StatusCode = StatusCodes.Status401Unauthorized
context.Response.StatusCode = StatusCodes.Status401Unauthorized,
null
),
_ =>
(
exception.Message,
exception.GetType().Name,
context.Response.StatusCode = StatusCodes.Status500InternalServerError
context.Response.StatusCode = StatusCodes.Status500InternalServerError,
null
)
};
@@ -63,9 +69,12 @@ public class CustomExceptionHandler : IExceptionHandler
Title = details.Title,
Detail = details.Detail,
Status = details.StatusCode,
Instance = context.Request.Path
Instance = context.Request.Path,
Extensions = details.Extra ?? new Dictionary<string, object>()
};
problemDetails.Extensions.Add("traceId", context.TraceIdentifier);
await context.Response.WriteAsJsonAsync(problemDetails, cancellationToken: cancellationToken);