public MultipartFormDataObject ToMultipartFormDataObject() { MultipartFormDataObject result = new MultipartFormDataObject(); if (File != null) { result.AddFile("file", File); } return(result); }
public async Task TestMultipartFormDataUploadPostMultipartFormDataObjectWithBodyHandler() { CommunicatorConfiguration configuration = GetCommunicatorConfiguration(); // changing the ApiEndpoint changes the underlying configuration section; restore it afterwards var apiEndpoint = configuration.ApiEndpoint; try { configuration.ApiEndpoint = new Uri("http://httpbin.org"); using (Communicator communicator = Factory.CreateCommunicator(configuration)) { MemoryStream content = new MemoryStream(); StreamWriter writer = new StreamWriter(content); writer.Write("file-content"); writer.Flush(); content.Position = 0; MultipartFormDataObject multipart = new MultipartFormDataObject(); multipart.AddFile("file", new UploadableFile("file.txt", content, "text/plain")); multipart.AddValue("value", "Hello World"); await communicator.Post("/post", null, null, multipart, (stream, headers) => { HttpBinResponse response = DefaultMarshaller.Instance.Unmarshal <HttpBinResponse>(stream); Assert.NotNull(response.Form); Assert.AreEqual(1, response.Form.Count); Assert.IsTrue(response.Form.ContainsKey("value")); Assert.AreEqual("Hello World", response.Form["value"]); Assert.NotNull(response.Files); Assert.AreEqual(1, response.Files.Count); Assert.IsTrue(response.Files.ContainsKey("file")); Assert.AreEqual("file-content", response.Files["file"]); }, null); } } finally { configuration.ApiEndpoint = apiEndpoint; } }
async Task <R> SendHttpMessage <R>(HttpMethod method, Uri uri, IEnumerable <IRequestHeader> requestHeaders, Func <HttpStatusCode, Stream, IEnumerable <IResponseHeader>, R> responseHandler, MultipartFormDataObject multipart) { var content = new MultipartFormDataContent(multipart.Boundary); content.Headers.ContentType = MediaTypeHeaderValue.Parse(multipart.ContentType); foreach (KeyValuePair <string, string> value in multipart.Values) { var valueContent = new StringContent(value.Value, System.Text.Encoding.UTF8); content.Add(valueContent, value.Key); } foreach (KeyValuePair <string, UploadableFile> file in multipart.Files) { var fileContent = new StreamContent(file.Value.Content); fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(file.Value.ContentType); if (file.Value.ContentLength >= 0) { fileContent.Headers.ContentLength = file.Value.ContentLength; } content.Add(fileContent, file.Key, file.Value.FileName); } var contentType = content.Headers.ContentType; if (contentType == null || !(multipart.ContentType).Equals(contentType.ToString())) { throw new InvalidOperationException("MultipartFormDataContent did not create the expected content type" + contentType); } return(await SendHttpMessage <R>(method, uri, requestHeaders, responseHandler, content, "<binary content>")); }
public async Task <R> Put <R>(Uri uri, IEnumerable <IRequestHeader> requestHeaders, MultipartFormDataObject multipart, Func <HttpStatusCode, Stream, IEnumerable <IResponseHeader>, R> responseHandler) { return(await SendHttpMessage <R>(HttpMethod.Put, uri, requestHeaders, responseHandler, multipart)); }
public MultipartFormDataObjectWrapper(MultipartFormDataObject multipart) { this.multipart = multipart; }