public override bool Validate(WebPostRequest <T> input)
 {
     new RequestValidator().Validate(input);
     if (input.Request == null)
     {
         throw new ArgumentNullException(nameof(input.Request));
     }
     return(true);
 }
Beispiel #2
0
        public async Task <IResponse <T2> > PostAsync <T1, T2>(WebPostRequest <T1> request)
        {
            byte[] postRequest = null;
            WebClientResponseMessage postResponse = null;
            WebResponse <T2>         response     = default(WebResponse <T2>);
            var       startTimestamp    = DateTime.UtcNow;
            Stopwatch watch             = new Stopwatch();
            var       serializeSettings = GetSerializerSettings(request.SerializerSettings);
            var       clientSettings    = GetClientSettings(request.ClientSetting);

            try
            {
                new RequestValidator().Validate(request);
                try
                {
                    postRequest = _serializer.Serialize(request.Request, serializeSettings);
                }
                catch (Exception exception)
                {
                    throw new SerializationException(request.Request.GetType(), exception);
                }
                try
                {
                    var webClientRequest = new WebClientRequestMessage()
                    {
                        Data = postRequest,
                        Url  = request.EndPoint.Url
                    };
                    foreach (var headerName in clientSettings.Headers.AllKeys)
                    {
                        webClientRequest.RequestHeaders.Add(headerName, clientSettings.Headers[headerName]);
                    }
                    webClientRequest.ContentHeaders.Add("content-type", clientSettings.ContentType);
                    watch.Start();
                    postResponse = await _client.PostAsync(webClientRequest, clientSettings, new CancellationToken());

                    watch.Stop();
                }
                catch (Exception exception)
                {
                    if (watch.IsRunning)
                    {
                        watch.Stop();
                    }
                    throw new ClientCommunicationException(request.EndPoint, exception);
                }
                response = GetResponse <T2>(postResponse, serializeSettings);
            }
            finally
            {
                if (watch.IsRunning)
                {
                    watch.Stop();
                }
                var strRequest = string.Empty;
                if (postRequest != null)
                {
                    strRequest = clientSettings.Encoding.GetString(postRequest);
                }
                await Log(postResponse, request.Request, strRequest, response, watch.ElapsedMilliseconds, clientSettings, request.EndPoint.Url, startTimestamp);
            }
            return(response);
        }