2022-02-03 13:19:48 +00:00
|
|
|
|
namespace ASC.Api.Core.Middleware;
|
|
|
|
|
|
|
|
|
|
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
|
2019-05-27 09:46:04 +00:00
|
|
|
|
{
|
2022-02-03 13:19:48 +00:00
|
|
|
|
public override void OnException(ExceptionContext context)
|
2019-05-27 09:46:04 +00:00
|
|
|
|
{
|
2022-02-03 13:19:48 +00:00
|
|
|
|
var status = (HttpStatusCode)context.HttpContext.Response.StatusCode;
|
|
|
|
|
string message = null;
|
2021-05-31 15:08:55 +00:00
|
|
|
|
|
2022-02-03 13:19:48 +00:00
|
|
|
|
if (status == HttpStatusCode.OK) status = HttpStatusCode.InternalServerError;
|
2020-09-03 09:38:13 +00:00
|
|
|
|
|
2022-02-03 13:19:48 +00:00
|
|
|
|
switch (context.Exception)
|
|
|
|
|
{
|
|
|
|
|
case ItemNotFoundException:
|
|
|
|
|
status = HttpStatusCode.NotFound;
|
|
|
|
|
message = "The record could not be found";
|
|
|
|
|
break;
|
|
|
|
|
case ArgumentException:
|
|
|
|
|
status = HttpStatusCode.BadRequest;
|
|
|
|
|
message = "Invalid arguments";
|
|
|
|
|
break;
|
|
|
|
|
case SecurityException:
|
|
|
|
|
status = HttpStatusCode.Forbidden;
|
|
|
|
|
message = "Access denied";
|
|
|
|
|
break;
|
|
|
|
|
case InvalidOperationException:
|
|
|
|
|
status = HttpStatusCode.Forbidden;
|
|
|
|
|
break;
|
|
|
|
|
}
|
2021-05-31 15:08:55 +00:00
|
|
|
|
|
2022-02-03 13:19:48 +00:00
|
|
|
|
var result = new ObjectResult(new ErrorApiResponse(status, context.Exception, message))
|
|
|
|
|
{
|
|
|
|
|
StatusCode = (int)status
|
|
|
|
|
};
|
2020-09-03 09:38:13 +00:00
|
|
|
|
|
2022-02-03 13:19:48 +00:00
|
|
|
|
context.Result = result;
|
2019-06-13 12:12:21 +00:00
|
|
|
|
}
|
2022-02-03 13:19:48 +00:00
|
|
|
|
}
|
2019-05-27 09:46:04 +00:00
|
|
|
|
|
2022-02-03 13:19:48 +00:00
|
|
|
|
public class CustomResponseFilterAttribute : ResultFilterAttribute
|
|
|
|
|
{
|
|
|
|
|
public override void OnResultExecuting(ResultExecutingContext context)
|
2019-06-13 12:12:21 +00:00
|
|
|
|
{
|
2022-02-03 13:19:48 +00:00
|
|
|
|
if (context.Result is ObjectResult result)
|
2019-05-27 09:46:04 +00:00
|
|
|
|
{
|
2022-02-03 13:19:48 +00:00
|
|
|
|
context.HttpContext.Items.TryGetValue("TotalCount", out var total);
|
|
|
|
|
context.HttpContext.Items.TryGetValue("Count", out var count);
|
|
|
|
|
result.Value = new SuccessApiResponse((HttpStatusCode)context.HttpContext.Response.StatusCode, result.Value, (long?)total, (int?)count);
|
2019-05-27 09:46:04 +00:00
|
|
|
|
}
|
2022-02-03 13:19:48 +00:00
|
|
|
|
|
|
|
|
|
base.OnResultExecuting(context);
|
2019-05-27 09:46:04 +00:00
|
|
|
|
}
|
|
|
|
|
}
|