Beispiel #1
0
        /// <summary>
        /// Saves the specified HTTP <paramref name="response" /> to the message store as an asynchronous operation.
        /// </summary>
        /// <param name="request">The HTTP request message that was sent.</param>
        /// <param name="response">The HTTP response messsage to save.</param>
        /// <returns>
        /// The task object representing the asynchronous operation.
        /// </returns>
        public override async Task SaveAsync(HttpRequestMessage request, HttpResponseMessage response)
        {
            // don't save content if not success
            if (!response.IsSuccessStatusCode || response.Content == null || response.StatusCode == HttpStatusCode.NoContent)
            {
                return;
            }

            var httpContent = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false);

            var fakeResponse = Convert(response);

            var key       = GenerateKey(request);
            var container = new FakeResponseContainer
            {
                HttpContent     = httpContent,
                ResponseMessage = fakeResponse
            };


            // save to store
#if PORTABLE
            lock (_storeLock)
                _responseStore[key] = container;
#else
            _responseStore.AddOrUpdate(key, container, (k, o) => container);
#endif
        }