예제 #1
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            foreach (var item in this)
            {
                if (item.Stream != null)
                {
                    var streamContent = new StreamContent(item.Stream);

                    if (item.ContentType != null)
                    {
                        streamContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(item.ContentType);
                    }

                    if (item.FileName != null)
                    {
                        streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                        {
                            FileName = item.FileName
                        };
                    }

                    this.multiPartContent.Add(streamContent);
                }
            }
            context.HttpContext.Response.ContentType = multiPartContent.Headers.ContentType.ToString();

            await multiPartContent.CopyToAsync(context.HttpContext.Response.Body);
        }
예제 #2
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            foreach (var item in this)
            {
                if (item.Stream != null)
                {
                    var content = new StreamContent(item.Stream);

                    if (item.ContentType != null)
                    {
                        content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(item.ContentType);
                    }

                    if (item.FileName != null)
                    {
                        var contentDisposition = new ContentDispositionHeaderValue("attachment");
                        contentDisposition.Name                         = item.FileName;
                        content.Headers.ContentDisposition              = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
                        content.Headers.ContentDisposition.FileName     = contentDisposition.FileName;
                        content.Headers.ContentDisposition.FileNameStar = contentDisposition.FileNameStar;
                    }

                    this.content.Add(content);
                }
            }

            context.HttpContext.Response.ContentLength = content.Headers.ContentLength;
            context.HttpContext.Response.ContentType   = content.Headers.ContentType.ToString();


            await content.CopyToAsync(context.HttpContext.Response.Body);
        }
예제 #3
0
        public void ReadAsMultipartAsyncUsingMultipartContentAsync(string boundary)
        {
            MultipartContent content = new MultipartContent("mixed", boundary);

            content.Add(new StringContent("A"));
            content.Add(new StringContent("B"));
            content.Add(new StringContent("C"));

            MemoryStream memStream = new MemoryStream();

            content.CopyToAsync(memStream).Wait();
            memStream.Position = 0;
            byte[] data        = memStream.ToArray();
            var    byteContent = new ByteArrayContent(data);

            byteContent.Headers.ContentType = content.Headers.ContentType;

            Task <IEnumerable <HttpContent> > task = byteContent.ReadAsMultipartAsync();

            task.Wait(TimeoutConstant.DefaultTimeout);
            IEnumerable <HttpContent> result = task.Result;

            Assert.Equal(3, result.Count());
            Assert.Equal("A", result.ElementAt(0).ReadAsStringAsync().Result);
            Assert.Equal("B", result.ElementAt(1).ReadAsStringAsync().Result);
            Assert.Equal("C", result.ElementAt(2).ReadAsStringAsync().Result);
        }
예제 #4
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            if (Stream != null)
            {
                var content = new StreamContent(Stream);

                if (ContentType != null)
                {
                    content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(ContentType);
                }

                this.content.Add(content);
            }

            context.HttpContext.Response.ContentLength = content.Headers.ContentLength;
            context.HttpContext.Response.ContentType   = content.Headers.ContentType.ToString();

            await content.CopyToAsync(context.HttpContext.Response.Body);
        }
예제 #5
0
        public void ReadAsMultipartAsyncNestedMultipartContentAsync(string boundary)
        {
            const int    nesting   = 10;
            const string innerText = "Content";

            MultipartContent innerContent = new MultipartContent("mixed", boundary);

            innerContent.Add(new StringContent(innerText));
            for (var cnt = 0; cnt < nesting; cnt++)
            {
                string           outerBoundary = String.Format("{0}_{1}", boundary, cnt);
                MultipartContent outerContent  = new MultipartContent("mixed", outerBoundary);
                outerContent.Add(innerContent);
                innerContent = outerContent;
            }

            MemoryStream memStream = new MemoryStream();

            innerContent.CopyToAsync(memStream).Wait();
            memStream.Position = 0;
            byte[]      data    = memStream.ToArray();
            HttpContent content = new ByteArrayContent(data);

            content.Headers.ContentType = innerContent.Headers.ContentType;

            for (var cnt = 0; cnt < nesting + 1; cnt++)
            {
                Task <IEnumerable <HttpContent> > task = content.ReadAsMultipartAsync();
                task.Wait(TimeoutConstant.DefaultTimeout);
                IEnumerable <HttpContent> result = task.Result;
                Assert.Equal(1, result.Count());
                content = result.ElementAt(0);
                Assert.NotNull(content);
            }

            string text = content.ReadAsStringAsync().Result;

            Assert.Equal(innerText, text);
        }
예제 #6
0
        public async Task ReadAsMultipartAsync_NestedMultipartContent(string boundary)
        {
            const int    nesting   = 10;
            const string innerText = "Content";

            MultipartContent innerContent = new MultipartContent("mixed", boundary);

            innerContent.Add(new StringContent(innerText));
            for (var cnt = 0; cnt < nesting; cnt++)
            {
                string           outerBoundary = String.Format("{0}_{1}", boundary, cnt);
                MultipartContent outerContent  = new MultipartContent("mixed", outerBoundary);
                outerContent.Add(innerContent);
                innerContent = outerContent;
            }

            MemoryStream memStream = new MemoryStream();
            await innerContent.CopyToAsync(memStream);

            memStream.Position = 0;
            byte[]      data    = memStream.ToArray();
            HttpContent content = new ByteArrayContent(data);

            content.Headers.ContentType = innerContent.Headers.ContentType;

            for (var cnt = 0; cnt < nesting + 1; cnt++)
            {
                MultipartMemoryStreamProvider result = await content.ReadAsMultipartAsync();

                Assert.Equal(1, result.Contents.Count);
                content = result.Contents[0];
                Assert.NotNull(content);
            }

            string text = await content.ReadAsStringAsync();

            Assert.Equal(innerText, text);
        }
        public async Task ReadAsMultipartAsync_UsingMultipartContent(string boundary)
        {
            MultipartContent content = new MultipartContent("mixed", boundary);

            content.Add(new StringContent("A"));
            content.Add(new StringContent("B"));
            content.Add(new StringContent("C"));

            MemoryStream memStream = new MemoryStream();
            await content.CopyToAsync(memStream);

            memStream.Position = 0;
            byte[] data        = memStream.ToArray();
            var    byteContent = new ByteArrayContent(data);

            byteContent.Headers.ContentType = content.Headers.ContentType;

            MultipartMemoryStreamProvider result = await byteContent.ReadAsMultipartAsync();

            Assert.Equal(3, result.Contents.Count);
            Assert.Equal("A", await result.Contents[0].ReadAsStringAsync());
            Assert.Equal("B", await result.Contents[1].ReadAsStringAsync());
            Assert.Equal("C", await result.Contents[2].ReadAsStringAsync());
        }