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; }
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))); }
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)); } }
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)); } }