예제 #1
0
        public bool ParseFormAndFiles(IRequestStream request)
        {
            if(HasResult) return false;
            fields = new NameValueCollection();
            files = new BasicHttpFileCollection();
            var conentType = request.ContentType;
            if(conentType == null)
                return false;

            if(conentType.StartsWith(ContentTypeFormUrlEncoded))
                WithBodyBytes(request, ParseFormUrlEncoded);
            else if(conentType.StartsWith(ContentTypeMultipartFormData))
                ParseMultiPart(request);
            else
                return false;

            return true;
        }
예제 #2
0
 void ParseMultiPart(IRequestStream request)
 {
     var multiPartStream = new MultiPartStream(GetBoundary(request.ContentType));
     multiPartStream.PartReady += (sender, e) => {
         var disposition = e.Part["Content-Disposition"];
         var name = NamePattern.Match(disposition).Groups["name"].Value;
         var hasFileName = FilenamePattern.Match(disposition);
         if(hasFileName.Success)
             files.Add(name, new BasicHttpPostedFile(
                 hasFileName.Groups["filename"].Value,
                 e.Part["Content-Type"],
                 e.Part.Body));
         else
             fields.Add(name, e.Part.GetBodyText(Encoding.UTF8));
     };
     multiPartStream.Read(request.InputStream, request.ContentLength);
 }
예제 #3
0
 void WithBodyBytes(IRequestStream request, Action<byte[], int> action)
 {
     var bytes = new byte[request.ContentLength];
     action(bytes, request.InputStream.ReadBlock(bytes, 0, bytes.Length));
 }