POST multipart/mixed in .NET

.net, c#, java, multipart

Solution

I finally managed to do it like this:

        HttpContent stringStreamContent = new StringContent(json);
        stringStreamContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        HttpContent fileStreamContent = new StreamContent(fileStream);
        fileStreamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

        // Construct a MultiPart
        // 1st : JSON Object with IN parameters
        // 2nd : Octet Stream with file to upload
        var content = new MultipartContent("mixed");
        content.Add(stringStreamContent);
        content.Add(fileStreamContent);

        // POST the request as "multipart/mixed"
        var result = client.PostAsync(myUrl, content).Result;

Problem

Just what the title says, if it helps in any way I have this java code (multipart consists of json object and file): ``` // Construct a MultiPart MultiPart multiPart = new MultiPart(); multiPart.bodyPart(new BodyPart(inParams, MediaType.APPLICATION_JSON_TYPE)); multiPart.bodyPart(new BodyPart(fileToUpload, MediaType.APPLICATION_OCTET_STREAM_TYPE)); // POST the request final ClientResponse clientResp = resource.type("multipart/mixed").post(ClientResponse.class, multiPart); ``` (using com.sun.jersey.multipart ) and I want to create the same in .NET (C#) So far I managed to POST the json object like this: ``` Uri myUri = new Uri("http://srezWebServices/rest/ws0/test"); var httpWebRequest = (HttpWebRequest)WebRequest.Create(myUri); httpWebRequest.Proxy = null; httpWebRequest.Accept = "application/json"; httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; Console.Write("START!"); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())){ string json = new JavaScriptSerializer().Serialize(new { wsId = "0", accessId = "101", accessCode = "x@ds!2" }); streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); } ``` But I want to send the file together. The content type has to be "multipart/mixed" because that's what the web service gets. I tried to find some package that supports multiparts but I found nothing except maybe this http://www.example-code.com/csharp/mime_multipartMixed.asp (which is not free so I can't use it).

Original source