public override void OnActionExecuting(ActionExecutingContext context) { RoleLevelEnum?roleEnum; try { string roleLevel = GetClaimValue(context.HttpContext, "Role"); roleEnum = Enum.Parse <RoleLevelEnum>(roleLevel); } catch { context.HttpContext.Response.StatusCode = ErrorCodes.Unauthorized.GetHashCode();; context.Result = new JsonResult(ExceptionPayload.New(new UnauthorizedException())); return; } var permissions = Roles.ToList().Contains(roleEnum.Value); if (!permissions) { context.HttpContext.Response.StatusCode = ErrorCodes.Forbidden.GetHashCode(); context.Result = new JsonResult(ExceptionPayload.New(new ForbiddenException())); return; } base.OnActionExecuting(context); }
protected IHttpActionResult HandleFailure <T>(T exceptionToHandle) where T : Exception { var exceptionPayload = ExceptionPayload.New(exceptionToHandle); return(exceptionToHandle is BusinessException? Content(HttpStatusCode.BadRequest, exceptionPayload) : Content(HttpStatusCode.InternalServerError, exceptionPayload)); }
/// <summary> /// Estrutura uma resposta http com a exceção disparada no <paramref name="context"/> /// </summary> /// <param name="context"></param> /// <returns></returns> public static HttpResponseMessage HandleExecutedContextException(this HttpActionExecutedContext context) { var exceptionPayload = ExceptionPayload.New(context.Exception); return(context.Exception is BusinessException? context.Request.CreateResponse(HttpStatusCode.BadRequest, exceptionPayload) : context.Request.CreateResponse(HttpStatusCode.InternalServerError, exceptionPayload)); }
/// <summary> /// Extension Method do HttpActionExecutedContext para manipular o context quando há uma exceção /// e retornar um ExceptionPayload customizado, informando ao client o que houve de errado. /// /// </summary> /// <param name="context">É o context atual da requisição</param> /// <returns>HttpResponseMessage contendo a exceção</returns> public static HttpResponseMessage HandleExecutedContextException(this HttpActionExecutedContext context) { // Retorna a resposta para o cliente com o erro 500 ou 400 e o ExceptionPayload (código de erro de negócio e message) var exceptionPayload = ExceptionPayload.New(context.Exception); return(context.Exception is BusinessException? context.Request.CreateResponse(HttpStatusCode.BadRequest, exceptionPayload) : context.Request.CreateResponse(HttpStatusCode.InternalServerError, exceptionPayload)); }
protected IActionResult HandleFailure <T>(T exceptionToHandle) where T : Exception { if (exceptionToHandle is ValidationException) { return(StatusCode(HttpStatusCode.BadRequest.GetHashCode(), (exceptionToHandle as ValidationException).Errors)); } var exceptionPayload = ExceptionPayload.New(exceptionToHandle); return(exceptionToHandle is BusinessException? StatusCode(exceptionPayload.ErrorCode.GetHashCode(), exceptionPayload) : StatusCode(HttpStatusCode.InternalServerError.GetHashCode(), exceptionPayload)); }
public static HttpResponseMessage HandleExecutedContextException(this HttpActionExecutedContext context) { return(context.Request.CreateResponse(HttpStatusCode.InternalServerError, ExceptionPayload.New(context.Exception))); }
public override void OnException(ExceptionContext context) { context.Exception = context.Exception; context.HttpContext.Response.StatusCode = 500; context.Result = new JsonResult(ExceptionPayload.New(context.Exception)); }
/// <summary> /// Extension Method do HttpActionExecutedContext para manipular o context quando há uma exceção /// e retornar um ExceptionPayload customizado, informando ao client o que houve de errado. /// /// </summary> /// <param name="context">É o contexto atual da requisição</param> /// <returns>HttpResponseMessage contendo a exceção</returns> public static HttpResponseMessage HandleExecutedContextException(this HttpActionExecutedContext context) { // Retorna a resposta para o cliente com o erro 500 e o ExceptionPayload (código de erro de negócio e mensagem) return(context.Request.CreateResponse(HttpStatusCode.InternalServerError, ExceptionPayload.New(context.Exception))); }