public Queue <RecordEntry> this[string key] { get { if (sessionRecords.ContainsKey(key)) { return(sessionRecords[key]); } else { throw new KeyNotFoundException( string.Format("Unable to find a matching HTTP request for URL '{0}'. Calling method {1}().", RecorderUtilities.DecodeBase64AsUri(key), GetCallingMethodName())); } } set { sessionRecords[key] = value; } }
protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { if (Mode == HttpRecorderMode.Playback) { // Will throw KeyNotFoundException if the request is not recorded lock (records) { var key = Matcher.GetMatchingKey(request); var queue = records[key]; if (!queue.Any()) { throw new InvalidOperationException(string.Format( "Queue empty for request {0}", RecorderUtilities.DecodeBase64AsUri(key))); } HttpResponseMessage result = queue.Dequeue().GetResponse(); result = AddTestModeHeaders(result); result.RequestMessage = request; return(Task.FromResult(result)); } } else { lock (this) { return(base.SendAsync(request, cancellationToken).ContinueWith <HttpResponseMessage>(response => { HttpResponseMessage result = response.Result; if (Mode == HttpRecorderMode.Record) { lock (records) { records.Enqueue(new RecordEntry(result)); } } return result; })); } } }