/// <summary> /// Initialize<br/> /// 初始化<br/> /// </summary> /// <param name="parentContext">Parent context</param> /// <param name="owinRequest">Original http request</param> public OwinHttpRequestWrapper( OwinHttpContextWrapper parentContext, IOwinRequest owinRequest) { ParentContext = parentContext; OwinRequest = owinRequest; OwinContent = new StreamContent(OwinRequest.Body); var contentType = OwinRequest.ContentType ?? ""; if (!string.IsNullOrEmpty(contentType)) { OwinContent.Headers.Add("Content-Type", contentType); } OwinFormCollection = new Lazy <NameValueCollection>(() => { if (contentType.StartsWith("application/x-www-form-urlencoded")) { return(OwinContent.ReadAsFormDataAsync().Result); } return(null); }); OwinMultipartFormCollection = new Lazy <Dictionary <string, IList <HttpContent> > >(() => { if (contentType.StartsWith("multipart/form-data")) { var result = new Dictionary <string, IList <HttpContent> >(); var provider = OwinContent.ReadAsMultipartAsync().Result; foreach (var content in provider.Contents) { var key = content.Headers.ContentDisposition.Name.Trim('"'); result.GetOrCreate(key, () => new List <HttpContent>()).Add(content); } return(result); } return(null); }); HttpContentReadResults = new Dictionary <HttpContent, string>(); }
public static async Task ParseFiles(Stream data, string contentType, Action <string, Stream> fileProcessor) { var streamCotent = new StreamContent(data); streamCotent.Headers.ContentType = MediaTypeHeaderValue.Parse(contentType); if (streamCotent.IsMimeMultipartContent()) { var provider = await streamCotent.ReadAsMultipartAsync(); foreach (var httpContent in provider.Contents) { var filename = httpContent.Headers.ContentDisposition.FileName; using (var fileContents = await httpContent.ReadAsStreamAsync()) { if (string.IsNullOrWhiteSpace(filename)) { fileProcessor(httpContent.Headers.ContentDisposition.Name.Trim('\"'), fileContents); continue; } fileProcessor(filename.Trim('\"'), fileContents); } } } else { var formdata = await streamCotent.ReadAsFormDataAsync(); var str = await streamCotent.ReadAsStringAsync(); var stream = await streamCotent.ReadAsStreamAsync(); } }