Beispiel #1
0
        public async Task <HttpObj> ProcessAsync(ProcessItem item)
        {
            var boundary = MultipartRequestHelper.GetBoundary(
                MediaTypeHeaderValue.Parse(item.HttpRequest.ContentType),
                _defaultFormOptions.MultipartBoundaryLengthLimit);
            var reader  = new MultipartReader(boundary, item.HttpRequest.Body);
            var section = await reader.ReadNextSectionAsync();

            //body
            ValidateSection(section);
            var ms = new MemoryStream();
            await section.Body.CopyToAsync(ms);

            var body    = Encoding.UTF8.GetString(ms.ToArray());
            var dataObj = Helper.ToHttpDataObj(body, item.DataObjType !);

            //stream
            section = await reader.ReadNextSectionAsync();

            ValidateSection(section);
            var fileName = GetFileName(section.ContentDisposition);

            if (fileName == null)
            {
                throw new ArgumentNullException("", "File name is null.");
            }
            dataObj.TrySetStreamName(fileName);
            var proxyStream = new ProxyStream(section.Body, dataObj.StreamLength);

            return(new HttpObj {
                HttpDataObj = dataObj, ProxyStream = proxyStream
            });
        }
Beispiel #2
0
        private async Task <(HttpDataObj dataObj, ProxyStream stream)> GetHttpDataObjAndStream(ActionInfo ai)
        {
            //dataObjType
            var method      = ApiWrapper.GetMethodInfo(ai, _contracts, _serviceProvider);
            var dataObjType = method.contractMethod.MergeArgType.Type;

            if (_context.Request.ContentType != null)
            {
                //multipart/form-data
                if (_context.Request.ContentType.StartsWith("multipart/form-data"))
                {
                    return(await GetFromFormDataAsync(dataObjType));
                }

                //application/json
                if (_context.Request.ContentType.StartsWith("application/json"))
                {
                    string body;
                    using (var sr = new StreamReader(_context.Request.Body, Encoding.UTF8))
                        body = await sr.ReadToEndAsync();

                    var dataObj = Helper.ToHttpDataObj(body, dataObjType);
                    return(dataObj, null);
                }

                throw new HttpFailedException($"ContentType:'{_context.Request.ContentType}' is not supported.");
            }

            //_context.Request.ContentType == null
            return(null, null);
        }
Beispiel #3
0
        public async Task <(HttpDataObj obj, ProxyStream stream)> GetFromFormDataAsync(Type dataObjType)
        {
            var boundary = MultipartRequestHelper.GetBoundary(
                MediaTypeHeaderValue.Parse(_context.Request.ContentType),
                _defaultFormOptions.MultipartBoundaryLengthLimit);
            var reader  = new MultipartReader(boundary, _context.Request.Body);
            var section = await reader.ReadNextSectionAsync();

            //body
            ValidateSection(section);
            MemoryStream ms = new MemoryStream();
            await section.Body.CopyToAsync(ms);

            var body    = Encoding.UTF8.GetString(ms.ToArray());
            var dataObj = Helper.ToHttpDataObj(body, dataObjType);

            //stream
            section = await reader.ReadNextSectionAsync();

            ValidateSection(section);
            var fileName = GetFileName(section.ContentDisposition);

            dataObj.TrySetStreamName(fileName);
            var proxyStream = new ProxyStream(section.Body, dataObj.StreamLength);

            return(dataObj, proxyStream);
        }
Beispiel #4
0
        public async Task <HttpObj> ProcessAsync(ProcessItem item)
        {
            string body;

            using (var sr = new StreamReader(item.HttpRequest.Body, Encoding.UTF8))
                body = await sr.ReadToEndAsync();

            var dataObj = Helper.ToHttpDataObj(body, item.DataObjType !);

            return(new HttpObj {
                HttpDataObj = dataObj
            });
        }