DocSpace-buildtools/common/ASC.Api.Core/Middleware/ResponseWrapper.cs
pavelbannov 8563fbc373 Merge branch 'develop' into feature/backend-refactor
# Conflicts:
#	common/ASC.Api.Core/Middleware/CommonApiResponse.cs
#	common/ASC.Api.Core/Middleware/ResponseWrapper.cs
#	common/ASC.Core.Common/Context/Impl/SubscriptionManager.cs
#	products/ASC.Files/Core/Configuration/FilesSettings.cs
#	products/ASC.Files/Core/Core/FileStorageService.cs
#	products/ASC.Files/Core/Utils/FileUploader.cs
#	products/ASC.Files/Core/Utils/SocketManager.cs
#	products/ASC.Files/Server/Controllers/FilesController.cs
#	products/ASC.Files/Server/Helpers/FilesControllerHelper.cs
#	products/ASC.Files/Server/Startup.cs
2022-02-23 17:37:34 +03:00

63 lines
2.1 KiB
C#

namespace ASC.Api.Core.Middleware;
using System.Security.Authentication;
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
var status = (HttpStatusCode)context.HttpContext.Response.StatusCode;
string message = null;
if (status == HttpStatusCode.OK)
{
status = HttpStatusCode.InternalServerError;
}
bool withStackTrace = true;
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 AuthenticationException:
status = HttpStatusCode.Unauthorized;
withStackTrace = false;
break;
case InvalidOperationException:
status = HttpStatusCode.Forbidden;
break;
}
var result = new ObjectResult(new ErrorApiResponse(status, context.Exception, message, withStackTrace))
{
StatusCode = (int)status
};
context.Result = result;
}
}
public class CustomResponseFilterAttribute : ResultFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext context)
{
if (context.Result is ObjectResult result)
{
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);
}
base.OnResultExecuting(context);
}
}