39 lines
1.5 KiB
C#
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
|
|
};
|
|
}
|