This commit is contained in:
2023-12-16 21:18:01 +02:00
parent 775146ee86
commit 2feaf50802
46 changed files with 641 additions and 429 deletions
@@ -0,0 +1,45 @@
namespace MyOffice.Web.Infrastructure.Filters;
using System.Collections;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using MyOffice.Web.Models;
public class ResponseFilter : IActionFilter
{
private readonly ILogger<ResponseFilter> _logger;
public ResponseFilter(ILogger<ResponseFilter> logger)
{
_logger = logger;
}
public void OnActionExecuting(ActionExecutingContext context)
{
}
public void OnActionExecuted(ActionExecutedContext context)
{
if (context.Result == null)
throw new NotSupportedException($"Response must be - empty");
if (!(context.Result is ObjectResult result))
throw new NotSupportedException($"Response must be an ObjectResult - {context.Result?.GetType().Name}");
if (result.Value == null)
throw new NotSupportedException($"Response must be an ObjectResult - empty");
if (result.Value is IResponseModel)
{
return;
}
var type = result.Value.GetType();
if (type.IsGenericType
&& result.Value is IEnumerable
&& type.GenericTypeArguments.Any(x => x.GetInterfaces().Any(y => y == typeof(IResponseModel))))
{
return;
}
throw new NotSupportedException($"Response must be an ObjectResult with an IResponseModel - {result.Value?.GetType().Name}");
}
}