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 }); }
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); }
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); }
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 }); }