示例#1
0
        public RequestHandlerPipeline(IRequestHandler <TRequest, TResponse> innerHandler,
                                      IPreRequestHandler <TRequest> preRequestHandler,
                                      IPostRequestHandler <TRequest, TResponse> postRequestHandler)
        {
            Requires.IsNotNull(innerHandler, nameof(innerHandler));
            Requires.IsNotNull(preRequestHandler, nameof(preRequestHandler));
            Requires.IsNotNull(postRequestHandler, nameof(postRequestHandler));

            _innerHandler       = innerHandler;
            _preRequestHandler  = preRequestHandler;
            _postRequestHandler = postRequestHandler;
        }
示例#2
0
        private RequestHandler SetupEnvironment <T>(
            T result = default(T),
            bool useDefaultArguments               = false,
            string methodName                      = "Substract",
            IPreRequestHandler preRequestHandler   = null,
            IPostRequestHandler postRequestHandler = null,
            IModelTransformer modelTransformer     = null)
        {
            var operation = CreateOperation(methodName);

            _arguments = operation.UnderlyingMethod.GetParameters().Select(parameter =>
                                                                           (useDefaultArguments ? Activator.CreateInstance(parameter.ParameterType) : null)).ToArray();

            ResponseInfo       response   = null;
            Mock <IController> controller = new Mock <IController>(MockBehavior.Strict);

            controller.SetupGet(instance => instance.Response).Returns(() => response);
            controller.SetupSet(instance => instance.Response = It.IsAny <ResponseInfo>()).Callback <IResponseInfo>(info => response = (ResponseInfo)info);

            _mapping = new Mock <IRequestMapping>(MockBehavior.Strict);
            _mapping.SetupGet(instance => instance.Operation).Returns(operation);
            _mapping.SetupGet(instance => instance.Target).Returns(controller.Object);
            _mapping.Setup(instance => instance.Invoke(_arguments)).Returns(result);

            _delegateMapper = new Mock <IDelegateMapper <RequestInfo> >(MockBehavior.Strict);
            _delegateMapper.Setup(instance => instance.MapRequest(It.IsAny <RequestInfo>())).Returns <RequestInfo>(request => _mapping.Object);

            _argumentBinder = new Mock <IArgumentBinder <RequestInfo> >();
            _argumentBinder.Setup(instance => instance.BindArguments(It.IsAny <RequestInfo>(), It.IsAny <IRequestMapping>()))
            .Returns <IRequestInfo, IRequestMapping>((request, requestMapping) => _arguments);

            _responseComposer = new Mock <IResponseComposer>(MockBehavior.Strict);
            _responseComposer.Setup(instance => instance.ComposeResponse(_mapping.Object, result, _arguments)).Returns((ResponseInfo)null);

            return(new RequestHandler(
                       _argumentBinder.Object,
                       _delegateMapper.Object,
                       _responseComposer.Object,
                       (preRequestHandler != null ? new[] { preRequestHandler } : null),
                       (postRequestHandler != null ? new[] { postRequestHandler } : null),
                       (modelTransformer != null ? new[] { modelTransformer } : null)));
        }
示例#3
0
        private ActionResult HandleRequest(Dictionary <string, object> request, string method, IPreRequestHandler preRequestHandler, IRequestHandler afterRequestHandler)
        {
            var authHeader = HttpContext.Request.Headers["Authorization"];

            if (authHeader.Count == 0)
            {
                return(Unauthorized());
            }

            Logger.LogInfo($"started preRequest {method}", "");

            Dictionary <string, object> additionalResponseData = null;

            if (preRequestHandler != null)
            {
                var result = preRequestHandler.GetHandledRequest(request, _dbContext);
                request = result.Request;
                additionalResponseData = result.AdditionalResponseData;
            }

            Logger.LogInfo($"finished preRequest {method}", "");

            Logger.LogInfo($"started {method} request", "");

            var response = new ProcessingManager().PRRequest($"purchase/{method}", JsonConvert.SerializeObject(request), authHeader);

            Logger.LogInfo($"finished {method} request", "");

            if (response.IsSuccess)
            {
                HttpContext.Response.Headers.Add("Content-Type", "application/json");
                var responseData    = JsonConvert.DeserializeObject <Dictionary <string, object> >(response.ResponseStr);
                var handledResponse = afterRequestHandler.GetHandledResponse(request, responseData, additionalResponseData, _dbContext);
                return(Ok(handledResponse));
            }
            else
            {
                return(BadRequest(response.ResponseStr));
            }
        }
示例#4
0
        private ActionResult HandleRequest(Dictionary <string, object> request, string method, IPreRequestHandler preRequestHandler, IRequestHandler afterRequestHandler)
        {
            System.Diagnostics.Stopwatch timerGlobal = new Stopwatch();

            timerGlobal.Start();
            var authHeader = HttpContext.Request.Headers["Authorization"];

            if (authHeader.Count == 0)
            {
                return(Unauthorized());
            }

            Logger.LogInfo($"started preRequest {method}", "");

            Dictionary <string, object> additionalResponseData = null;

            if (preRequestHandler != null)
            {
                var result = preRequestHandler.GetHandledRequest(request);
                request = result.Request;
                additionalResponseData = result.AdditionalResponseData;
            }

            Logger.LogInfo($"finished preRequest {method}", "");

            Logger.LogInfo($"started {method} request", "");
            System.Diagnostics.Stopwatch timer = new Stopwatch();

            timer.Start();

            var response = new ProcessingManager().PRRequest($"purchase/{method}", JsonConvert.SerializeObject(request), authHeader);

            timer.Stop();
            Logger.LogInfo($"finished {method} request: time: {timer.ElapsedMilliseconds}", "");

            if (response.IsSuccess)
            {
                HttpContext.Response.Headers.Add("Content-Type", "application/json");
                var responseData    = JsonConvert.DeserializeObject <Dictionary <string, object> >(response.ResponseStr);
                var handledResponse = afterRequestHandler.GetHandledResponse(request, responseData, additionalResponseData);
                timerGlobal.Stop();
                Logger.LogInfo($"finished {method} Global request: time: {timerGlobal.ElapsedMilliseconds}", "");
                return(Ok(handledResponse));
            }
            else if (response.IsUnathorized)
            {
                timerGlobal.Stop();
                Logger.LogInfo($"finished {method} Global request: time: {timerGlobal.ElapsedMilliseconds}", "");
                return(Unauthorized());
            }
            else
            {
                timerGlobal.Stop();
                Logger.LogInfo($"finished {method} Global request: time: {timerGlobal.ElapsedMilliseconds}", "");
                return(BadRequest(response.ResponseStr));
            }
        }