private async Task <HttpResponseMessage> RecordAsync(HttpCallAsync call, HttpRequestMessage request, CancellationToken cancellationToken) { if (request.Content != null) { await request.Content.LoadIntoBufferAsync(); } //HttpRequest must be created before passing to the rest of the HttpClient middleware //since additional handlers can modify the request, ie. add headers which we will not have //when replaying and trying to mach. var httpRequest = HttpRequest.Create(request); var response = await call(request, cancellationToken); if (response.Content != null) { await response.Content.LoadIntoBufferAsync(); } var httpResponse = HttpResponse.Create(response); lock (_httpInteractions) { _httpInteractions.Add(new HttpInteraction { Request = httpRequest, Response = httpResponse }); } return(response); }
private Task <HttpResponseMessage> RecordNewAsync(HttpCallAsync call, HttpRequestMessage request, CancellationToken cancellationToken) { var match = FindMatch(HttpRequest.Create(request)); if (match == null) { return(RecordAsync(call, request, cancellationToken)); } return(ProcessMatchAsync(match)); }
private Task <HttpResponseMessage> RecordOnceAsync(HttpCallAsync call, HttpRequestMessage request, CancellationToken cancellationToken) { if (_isNew) { return(RecordAsync(call, request, cancellationToken)); } var httpRequest = HttpRequest.Create(request); var match = FindMatch(httpRequest); if (match != null) { return(ProcessMatchAsync(match)); } throw new MatchNotFoundException(httpRequest); }
internal Task <HttpResponseMessage> HandleRequestAsync(HttpCallAsync call, HttpRequestMessage request, CancellationToken cancellationToken) { if (_recordMode == RecordMode.None) { return(PlaybackAsync(request)); } if (_recordMode == RecordMode.Once) { return(RecordOnceAsync(call, request, cancellationToken)); } if (_recordMode == RecordMode.NewEpisodes) { return(RecordNewAsync(call, request, cancellationToken)); } if (_recordMode == RecordMode.All) { return(RecordAsync(call, request, cancellationToken)); } throw new InvalidOperationException("Cassette record mode unknown: " + _recordMode.ToString()); }