public MultipartFormDataObject ToMultipartFormDataObject()
        {
            MultipartFormDataObject result = new MultipartFormDataObject();

            if (File != null)
            {
                result.AddFile("file", File);
            }
            return(result);
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        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>"));
        }
Ejemplo n.º 4
0
 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));
 }
Ejemplo n.º 5
0
 public MultipartFormDataObjectWrapper(MultipartFormDataObject multipart)
 {
     this.multipart = multipart;
 }