private async Task<string> DownloadPackageFromFeed(string packageId, string version, string operation = "Install")
{
string filename;
var client = new HttpClient();
var requestUri = UrlHelper.V2FeedRootUrl + @"Package/" + packageId + @"/" + version;
TestOutputHelper.WriteLine("GET " + requestUri);
var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
request.Headers.Add("user-agent", "TestAgent");
request.Headers.Add("NuGet-Operation", operation);
var responseMessage = await client.SendAsync(request);
if (responseMessage.StatusCode == HttpStatusCode.OK)
{
try
{
var contentDisposition = responseMessage.Content.Headers.ContentDisposition;
if (contentDisposition != null)
{
filename = contentDisposition.FileName;
}
else
{
// if file name not present set the package Id for the file name
filename = packageId;
}
using (var fileStream = File.Create(filename))
{
await responseMessage.Content.CopyToAsync(fileStream);
}
}
catch (Exception e)
{
TestOutputHelper.WriteLine("EXCEPTION: " + e);
throw;
}
}
else
{
var message = string.Format("Http StatusCode: {0}", responseMessage.StatusCode);
TestOutputHelper.WriteLine(message);
throw new ApplicationException(message);
}
return filename;
}
}