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