コード例 #1
0
        public void CanPostSimpleMultipartFormDataWithEncoding(
            [Values("UTF-8", "iso-8859-1")] string charsetIn,
            [Values("UTF-8", "iso-8859-1")] string charsetOut)
        {
            // Arrange
            MultipartData data = new MultipartData {
                Name = "ÆØÅüî", Age = 10, Active = true
            };
            Request formdataReq = Session.Bind(MultipartFormDataTemplate);

            // NOTE: I haven't found a way to test what encoding it actually uses for the post data,
            // so that must be inspected using Fiddler :-(

            // Act
            using (Response <string> response = formdataReq.Accept("text/plain")
                                                .AcceptCharset(charsetOut)
                                                .CodecParameter("Charset", charsetIn)
                                                .ContentType("multipart/form-data")
                                                .Post <string>(data))
            {
                // Assert
                Assert.IsTrue(response.Headers["x-contenttype"].StartsWith("multipart/form-data"));
                Assert.AreEqual(charsetOut, response.Headers["x-accept-charset"]);
                Assert.AreEqual("ÆØÅüî-10-True", response.Body);
            }
        }
コード例 #2
0
 public object Post(MultipartData data)
 {
     CommunicationContext.Response.Headers["X-contenttype"] = CommunicationContext.Request.Headers["Content-Type"];
     return(new EncodingData
     {
         Data = string.Format("{0}-{1}", data.Name, data.Age)
     });
 }
コード例 #3
0
        public void CanPostSimpleMultipartFormDataUsingShorthand()
        {
            // Arrange
            MultipartData data = new MultipartData {
                Name = "Pete", Age = 10
            };
            Request formdataReq = Session.Bind(MultipartFormDataTemplate);

            // Act
            Response <string> response = formdataReq.Accept("text/plain").AsMultipartFormData().Post <string>(data);

            // Assert
            Assert.IsTrue(response.Headers["x-contenttype"].StartsWith("multipart/form-data"));
            Assert.AreEqual("Pete-10", response.Body);
        }
コード例 #4
0
        public void WhenSpecifyingCharsetForCodecItUsesIt()
        {
            // Arrange
            MultipartData data = new MultipartData {
                Name = "ÆØÅüî", Age = 10
            };
            Request formdataReq = Session.Bind(MultipartFormDataTemplate);

            // Act + Assert (throws because it tries to use non-existing charset)
            // - Not the best test ever, I know ...
            AssertThrows <ArgumentException>(() =>
                                             formdataReq.Accept("text/plain")
                                             .CodecParameter("Charset", "NON-EXISTING")
                                             .ContentType("multipart/form-data")
                                             .Post <string>(data),
                                             ex => ex.Message.Contains("NON-EXISTING"));
        }
コード例 #5
0
        private Stream TestFileUpload(Stream body, HTTPMultipartParser parser)
        {
            if (step_through)
            {
                //This code was made for walking^Wstepping through...
                string a = "";
                foreach (StreamedFileData fileData in parser.Parse())
                {
                    if (fileData.IsBinary)
                    {
                        byte[] x = (byte[])fileData.GetData();
                    }
                    else
                    {
                        a += fileData.Name + ": '" + (string)fileData.GetData() + "'";
                    }
                }
            }
            else                 //Will save files to disk
            {
                foreach (StreamedFileData fileData in parser.Parse())
                {
                    fileData.ToFile(Path.Combine(dir_path, fileData.FileName));
                }
            }

            StreamWriter fieldFile = null;

            if (!step_through)
            {
                //Create a file to save non-file fields
                fieldFile = File.CreateText(Path.Combine(dir_path, "__multipart_fields.txt"));
            }

            //Save/step through any other fields/buffered files
            foreach (var kvp in parser.Fields)
            {
                string        name  = kvp.Key;
                MultipartData field = kvp.Value;

                if (!step_through)
                {
                    if (field.IsBinary)
                    {
                        File.WriteAllBytes(Path.Combine(dir_path, field.FileName ?? field.Name), ((BinaryData)field).Data);
                    }
                    else
                    {
                        if (field.IsFile)
                        {
                            File.WriteAllText(Path.Combine(dir_path, field.FileName ?? field.Name), ((TextData)field).Data);
                        }
                        else
                        {
                            fieldFile.WriteLine("[ ===== " + field.Name + " ====]");
                            fieldFile.WriteLine(((TextData)field).Data);
                            fieldFile.WriteLine();
                        }
                    }
                }
            }

            if (!step_through)
            {
                fieldFile.Close();
            }

            return(null);
        }
コード例 #6
0
        public static async Task <MultipartData> GetMultipartContent(HttpRequestMessage request, string textDataHeader)
        {
            var streamProvider = await request.Content.ReadAsMultipartAsync();

            var result = new MultipartData();

            if (streamProvider.Contents.Count == 0)
            {
                result.ErrorType = MultipartDataError.FileDataEmpty;
                return(result);
            }

            if (streamProvider.Contents.Count == 1) // from simulator
            {
                IEnumerable <string> textData;
                if (!request.Headers.TryGetValues(textDataHeader, out textData))
                {
                    result.ErrorType = MultipartDataError.TextDataEmpty;
                    return(result);
                }

                var text = textData.First();
                if (string.IsNullOrEmpty(text))
                {
                    result.ErrorType = MultipartDataError.TextDataEmpty;
                    return(result);
                }
                result.TextData = text;
            }
            else // from devices, count == 2
            {
                var nameContent =
                    streamProvider.Contents.FirstOrDefault(
                        cnt => cnt.Headers != null && cnt.Headers.ContentDisposition != null && cnt.Headers.ContentDisposition.Name == "\"" + textDataHeader + "\"");
                if (nameContent == null)
                {
                    result.ErrorType = MultipartDataError.TextDataEmpty;
                    return(result);
                }
                result.TextData = await nameContent.ReadAsStringAsync();
            }

            var fileContent = streamProvider.Contents.FirstOrDefault(cnt =>
                                                                     cnt.Headers.ContentDisposition == null || string.IsNullOrEmpty(cnt.Headers.ContentDisposition.Name) || cnt.Headers.ContentDisposition.Name == "\"\"" || // stub for windows phone emulator (possibly for windows phone real)
                                                                     cnt.Headers.ContentDisposition.Name == "\"file\"" || cnt.Headers.ContentDisposition.Name == "file");

            if (fileContent != null)
            {
                var fileData = new FileData();

                // stub for WP emulator
                if (fileContent.Headers.ContentDisposition == null)
                {
                    await FillFileDataForWP(fileContent, fileData);
                }
                else
                {
                    fileData.ContentType = fileContent.Headers.ContentType.MediaType;
                    fileData.FileName    = fileContent.Headers.ContentDisposition.FileName.Replace("\"", string.Empty);
                    fileData.InputStream = await fileContent.ReadAsStreamAsync();
                }
                result.FileData = fileData;
                return(result);
            }
            else
            {
                result.ErrorType = MultipartDataError.FileDataEmpty;
                return(result);
            }
        }