如何使用HttpClient C#下载多个文件?

如何使用HttpClient C#下载多个文件?,c#,C#,我想使用“HttpClient”C#下载多个文件 我已经成功地完成了单文件GET的代码,但我希望在客户端调用API时下载多个文件 我研究了一些HttpClient、HttpWebResponse和WebClient。对于我的代码,我使用的是HttpResponseMessage我真的不知道它属于哪一类。对不起,我不太清楚这个概念。有什么解释就好了 namespace WebAPIASPNET.Controllers { public class EbookController : Api

我想使用“HttpClient”C#下载多个文件

我已经成功地完成了单文件GET的代码,但我希望在客户端调用API时下载多个文件

我研究了一些HttpClient、
HttpWebResponse
和WebClient。对于我的代码,我使用的是
HttpResponseMessage
我真的不知道它属于哪一类。对不起,我不太清楚这个概念。有什么解释就好了

namespace WebAPIASPNET.Controllers
{
    public class EbookController : ApiController
    {
        string bookPath_Pdf = @"D:\VisualStudio\randomfile.pdf";
        string bookPath_xls = @"D:\VisualStudio\randomfile.xls";
        string bookPath_doc = @"D:\VisualStudio\randomfile.docx";
        string bookPath_zip = @"D:\VisualStudio\randomfile.zip";

        public IHttpActionResult Get(string format)
        {
            string reqBook = format.ToLower() == "pdf" ? bookPath_Pdf : (format.ToLower() == "xls" ? bookPath_xls : (format.ToLower() == "doc" ? bookPath_doc : bookPath_zip));
            string bookName = "sample." + format.ToLower();

            //converting Pdf file into bytes array  
            var dataBytes = File.ReadAllBytes(reqBook);
            //adding bytes to memory stream   
            var dataStream = new MemoryStream(dataBytes);
            return new eBookResult(dataStream, Request, bookName);
        }

        [HttpGet]
        [Route("GetIT/{format}")]
        public IHttpActionResult GetbookFor(string format)
        {
            string reqBook = format.ToLower() == "pdf" ? bookPath_Pdf : (format.ToLower() == "xls" ? bookPath_xls : (format.ToLower() == "doc" ? bookPath_doc : bookPath_zip));
            string bookName = "sample." + format.ToLower();

            //converting Pdf file into bytes array  
            var dataBytes = File.ReadAllBytes(reqBook);
            //adding bytes to memory stream   
            var dataStream = new MemoryStream(dataBytes);
            return new eBookResult(dataStream, Request, bookName);
        }
        [HttpGet]
        [Route("GetBookForHRM/{format}")]
        public HttpResponseMessage GetBookForHRM(string format)
        {
            string reqBook = format.ToLower() == "pdf" ? bookPath_Pdf : (format.ToLower() == "xls" ? bookPath_xls : (format.ToLower() == "doc" ? bookPath_doc : bookPath_zip));
            string bookName = "sample." + format.ToLower();
            //converting Pdf file into bytes array  
            var dataBytes = File.ReadAllBytes(reqBook);
            //adding bytes to memory stream   
            var dataStream = new MemoryStream(dataBytes);

            HttpResponseMessage httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK);
            httpResponseMessage.Content = new StreamContent(dataStream);
            httpResponseMessage.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
            httpResponseMessage.Content.Headers.ContentDisposition.FileName = bookName;
            httpResponseMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");

            return httpResponseMessage;
        }
    }

    public class eBookResult : IHttpActionResult
        {
            MemoryStream bookStuff;
            string PdfFileName;
            HttpRequestMessage httpRequestMessage;
            HttpResponseMessage httpResponseMessage;
            public eBookResult(MemoryStream data, HttpRequestMessage request, string filename)
            {
                bookStuff = data;
                httpRequestMessage = request;
                PdfFileName = filename;
            }
            public System.Threading.Tasks.Task<HttpResponseMessage> ExecuteAsync(System.Threading.CancellationToken cancellationToken)
            {
                httpResponseMessage = httpRequestMessage.CreateResponse(HttpStatusCode.OK);
                httpResponseMessage.Content = new StreamContent(bookStuff);
                //httpResponseMessage.Content = new ByteArrayContent(bookStuff.ToArray());  
                httpResponseMessage.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
                httpResponseMessage.Content.Headers.ContentDisposition.FileName = PdfFileName;
                httpResponseMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");

                return System.Threading.Tasks.Task.FromResult(httpResponseMessage);
            }
        }
    }                                          
名称空间webapiasnet.Controllers
{
公共类电子书控制器:ApiController
{
字符串bookPath_Pdf=@“D:\VisualStudio\randomfile.Pdf”;
字符串bookPath_xls=@“D:\VisualStudio\randomfile.xls”;
字符串bookPath_doc=@“D:\VisualStudio\randomfile.docx”;
字符串bookPath_zip=@“D:\VisualStudio\randomfile.zip”;
公共IHttpActionResult获取(字符串格式)
{
字符串reqBook=format.ToLower()=“pdf”?bookPath\u pdf:(format.ToLower()=“xls”?bookPath\u xls:(format.ToLower()=“doc”?bookPath\u doc:bookPath\u zip));
字符串bookName=“sample.”+format.ToLower();
//将Pdf文件转换为字节数组
var-dataBytes=File.ReadAllBytes(reqBook);
//向内存流添加字节
var数据流=新的内存流(数据字节);
返回新的电子书结果(数据流、请求、书名);
}
[HttpGet]
[路由(“GetIT/{format}”)]
公共IHttpActionResult GetbookFor(字符串格式)
{
字符串reqBook=format.ToLower()=“pdf”?bookPath\u pdf:(format.ToLower()=“xls”?bookPath\u xls:(format.ToLower()=“doc”?bookPath\u doc:bookPath\u zip));
字符串bookName=“sample.”+format.ToLower();
//将Pdf文件转换为字节数组
var-dataBytes=File.ReadAllBytes(reqBook);
//向内存流添加字节
var数据流=新的内存流(数据字节);
返回新的电子书结果(数据流、请求、书名);
}
[HttpGet]
[路由(“GetBookForHRM/{format}”)]
公共HttpResponseMessage GetBookForHRM(字符串格式)
{
字符串reqBook=format.ToLower()=“pdf”?bookPath\u pdf:(format.ToLower()=“xls”?bookPath\u xls:(format.ToLower()=“doc”?bookPath\u doc:bookPath\u zip));
字符串bookName=“sample.”+format.ToLower();
//将Pdf文件转换为字节数组
var-dataBytes=File.ReadAllBytes(reqBook);
//向内存流添加字节
var数据流=新的内存流(数据字节);
HttpResponseMessage HttpResponseMessage=Request.CreateResponse(HttpStatusCode.OK);
httpResponseMessage.Content=新的StreamContent(数据流);
httpResponseMessage.Content.Headers.ContentDisposition=新系统.Net.Http.Headers.ContentDispositionHeaderValue(“附件”);
httpResponseMessage.Content.Headers.ContentDisposition.FileName=bookName;
httpResponseMessage.Content.Headers.ContentType=新系统.Net.Http.Headers.MediaTypeHeaderValue(“应用程序/八位字节流”);
返回httpResponseMessage;
}
}
公共类电子书结果:IHttpActionResult
{
记忆流凝灰岩;
字符串PdfFileName;
HttpRequestMessage HttpRequestMessage;
HttpResponseMessage HttpResponseMessage;
公共电子书结果(MemoryStream数据、HttpRequestMessage请求、字符串文件名)
{
bookStuff=数据;
httpRequestMessage=请求;
PdfFileName=文件名;
}
公共System.Threading.Tasks.Task ExecuteAsync(System.Threading.CancellationToken CancellationToken)
{
httpResponseMessage=httpRequestMessage.CreateResponse(HttpStatusCode.OK);
httpResponseMessage.Content=新的StreamContent(bookStuff);
//httpResponseMessage.Content=newbytearraycontent(bookStuff.ToArray());
httpResponseMessage.Content.Headers.ContentDisposition=新系统.Net.Http.Headers.ContentDispositionHeaderValue(“附件”);
httpResponseMessage.Content.Headers.ContentDisposition.FileName=PdfielName;
httpResponseMessage.Content.Headers.ContentType=新系统.Net.Http.Headers.MediaTypeHeaderValue(“应用程序/八位字节流”);
返回System.Threading.Tasks.Task.FromResult(httpResponseMessage);
}
}
}                                          

我应该在代码中添加什么,或者我可以使用什么方法?谢谢

怎么样?可能是@GokulMaha的副本,但我想使用HttpClient而不是WebClient…那么?然后使用HttpClient。您确定客户端不能使用当前API逐个加载文件吗?加载看起来不是REST特定的。怎么样?可能是@GokulMaha的副本,但我想使用HttpClient而不是WebClient…所以呢?然后使用HttpClient。您确定客户端不能使用当前API逐个加载文件吗?加载看起来不是REST特定的。