public override bool Validate(WebPostRequest <T> input) { new RequestValidator().Validate(input); if (input.Request == null) { throw new ArgumentNullException(nameof(input.Request)); } return(true); }
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); }