public static async Task <CassetteRecordResponse> CreateFromResponse(HttpResponseMessage response, CassetteRecordRequest request, CookieContainer?cookieContainer) { var record = new CassetteRecordResponse(response.Version, (int)response.StatusCode, response.ReasonPhrase, response.ToNameValueCollection()) { Request = await CassetteRecordRequest.CreateFromRequest(response.RequestMessage, cookieContainer) }; // In case of Redirect inner innerHandler can create a new request, that actually did redirect // External users can expect this RequestMessage for check redirecting URI for example // innerHandler can change request, so we should create a new CassetteRecordRequest // from response and compare it with the original value if (record.Request == request) { record.Request = null; } var(body, newContent) = await CassetteBody.CreateCassetteBody(response.Content); record.Body = body; if (newContent != null) { response.Content = newContent; } return(record); }
public static async Task <CassetteRecordRequest> CreateFromRequest(HttpRequestMessage request, CookieContainer?cookieContainer) { var record = new CassetteRecordRequest(request.Method.Method, request.RequestUri, request.ToNameValueCollection()); // Host header is required by HTTP 1.1 spec, so we should add it if it is not provided if (record.Headers["Host"] == null) { record.Headers.Add("Host", request.RequestUri.IdnHost); } if (cookieContainer?.GetCookieHeader(request.RequestUri) is { } cookieHeader&& !string.IsNullOrWhiteSpace(cookieHeader)) { record.Headers.Add("Cookie", cookieHeader); } var(body, newContent) = await CassetteBody.CreateCassetteBody(request.Content); record.Body = body; if (newContent != null) { request.Content = newContent; } return(record); }