DocSpace-buildtools/common/ASC.Api.Core/Middleware/ResponseWrapper.cs

53 lines
1.8 KiB
C#
Raw Normal View History

namespace ASC.Api.Core.Middleware;
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
2019-05-27 09:46:04 +00:00
{
public override void OnException(ExceptionContext context)
2019-05-27 09:46:04 +00:00
{
var status = (HttpStatusCode)context.HttpContext.Response.StatusCode;
string message = null;
2021-05-31 15:08:55 +00:00
if (status == HttpStatusCode.OK) status = HttpStatusCode.InternalServerError;
2020-09-03 09:38:13 +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
var result = new ObjectResult(new ErrorApiResponse(status, context.Exception, message))
{
StatusCode = (int)status
};
2020-09-03 09:38:13 +00:00
context.Result = result;
2019-06-13 12:12:21 +00:00
}
}
2019-05-27 09:46:04 +00:00
public class CustomResponseFilterAttribute : ResultFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext context)
2019-06-13 12:12:21 +00:00
{
if (context.Result is ObjectResult result)
2019-05-27 09:46:04 +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
}
base.OnResultExecuting(context);
2019-05-27 09:46:04 +00:00
}
}