Files
Backend-Api/ServiceHost/Filters/OperationResultFilter.cs

39 lines
1.5 KiB
C#

using GozareshgirProgramManager.Application._Common.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
namespace ServiceHost.Filters;
public class OperationResultFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
// بررسی کنید که درخواست برای مسیر /api/programmanager/ است
var path = context.HttpContext.Request.Path.Value ?? string.Empty;
if (!path.StartsWith("/api/programmanager/", StringComparison.OrdinalIgnoreCase))
{
return; // اگر مسیر مطابقت ندارد، فیلتر را اعمال نکنید
}
if (context.Result is ObjectResult objectResult)
{
if (objectResult.Value is OperationResult operationResult && !operationResult.IsSuccess)
{
int statusCode = GetStatusCode(operationResult.ErrorType);
objectResult.StatusCode = statusCode;
context.HttpContext.Response.StatusCode = statusCode;
}
}
}
private static int GetStatusCode(ErrorType errorType) => errorType switch
{
ErrorType.NotFound => StatusCodes.Status404NotFound,
ErrorType.Unauthorized => StatusCodes.Status401Unauthorized,
ErrorType.Validation => StatusCodes.Status400BadRequest,
ErrorType.BadRequest => StatusCodes.Status400BadRequest,
ErrorType.InternalServerError => StatusCodes.Status500InternalServerError,
_ => StatusCodes.Status400BadRequest
};
}