/// <inheritdoc/>
        public async Task <HttpResponse <TResponse> > PostAsync <TResponse>(HttpRequest request, RequestContext requestContext, CancellationToken cancellationToken)
            where TResponse : Resource, new()
        {
            PrepareRequest(request, requestContext);

            var body = _serializer.Serialize(request.Payload);

            var response = await _requestExecutor.PostAsync(request.Uri, request.Headers, body, cancellationToken).ConfigureAwait(false);

            EnsureResponseSuccess(response);

            var data     = _serializer.Deserialize(PayloadOrEmpty(response));
            var resource = _resourceFactory.CreateNew <TResponse>(data);

            return(CreateResourceResponse(response, resource));
        }