Пример #1
0
        public static async Task ResponseFilterAsync(IRequest req, IResponse res, object requestDto)
        {
            if (!(requestDto is IHasResponseStatus response))
            {
                return;
            }

            var validator = ValidatorCache.GetValidator(req, req.Dto.GetType());

            if (validator == null)
            {
                return;
            }

            var validationResult = await Validate(validator, req, req.Dto);

            var responseStatus = response.ResponseStatus
                                 ?? DtoUtils.CreateResponseStatus(validationResult.Errors[0].ErrorCode);

            foreach (var error in validationResult.Errors)
            {
                var responseError = new ResponseError
                {
                    ErrorCode = error.ErrorCode,
                    FieldName = error.PropertyName,
                    Message   = error.ErrorMessage,
                    Meta      = new Dictionary <string, string> {
                        ["Severity"] = error.Severity.ToString()
                    }
                };
                responseStatus.Errors.Add(responseError);
            }

            response.ResponseStatus = responseStatus;
        }
Пример #2
0
        private static void SetupExceptionShielding(IAppHost appHost)
        {
            appHost.ServiceExceptionHandlers.Add((httpReq, request, exception) =>
            {
                if (IsUnexpectedException(exception))
                {
                    var error    = DtoUtils.CreateResponseStatus(exception, request, true);
                    var recorder = appHost.Resolve <IRecorder>();
                    var callerId = appHost.TryResolve <ICurrentCaller>()?.Id;
                    recorder.Crash(CrashLevel.NonCritical, exception, callerId, error.StackTrace);

                    return(DtoUtils.CreateErrorResponse(request, WrapInUnhandledException(exception)));
                }

                return(null);
            });

            appHost.UncaughtExceptionHandlers.Add((request, response, operationName, exception) =>
            {
                var recorder = appHost.Resolve <IRecorder>();
                var callerId = appHost.TryResolve <ICurrentCaller>()?.Id;
                recorder.Crash(CrashLevel.Critical, WrapInUnhandledException(exception), callerId);
                response.EndRequest(true);
            });