public override async Task WriteResponseBodyAsync(OutputFormatterContext context) { var reqServices = context.HttpContext.RequestServices; var multiContext = (MultiObjectResultContext)reqServices.GetService(typeof(MultiObjectResultContext)); var jsonHelper = (IJsonHelper)reqServices.GetService(typeof(IJsonHelper)); var content = new MultipartContent("json"); var resultObject = context.Object; var resultObjectWasAdded = false; foreach (var entry in multiContext.AdditionalObjects) { object additional = resultObject; if (additional.GetType() != entry.Value.Item1) { additional = reqServices.GetService(entry.Value.Item1); } else { resultObjectWasAdded = true; } content.Add(ContentPart(jsonHelper, entry.Key, additional, entry.Value.Item2)); } if (!resultObjectWasAdded) { content.Add(ContentPart(jsonHelper, resultObject.GetType().Name, resultObject, false)); } var response = context.HttpContext.Response; response.ContentType = content.Headers.ContentType.ToString(); await content.CopyToAsync(response.Body); }
public void AddAttachment(long workspaceId, long Id, string fileName, string description, System.IO.Stream fileStream) { string url = String.Format("{0}/api/rest/v1/workspaces/{1}/items/{2}/attachments", baseUrl, workspaceId, Id); var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Post, url); var scriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); var handler = new System.Net.Http.HttpClientHandler(); handler.CookieContainer = _cookieJar; var ressourceName = fileName + DateTime.Now.ToString(); var httpContent1 = new System.Net.Http.StringContent(scriptSerializer.Serialize(new newAttachment() { fileName = fileName, description = description, resourceName = fileName })); httpContent1.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); byte[] bytes = new byte[fileStream.Length]; fileStream.Read(bytes, 0, (int)fileStream.Length); var memoryStream = new System.IO.MemoryStream(bytes); var httpContent2 = new System.Net.Http.StreamContent(memoryStream); httpContent2.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("*"); httpContent2.Headers.ContentDisposition.FileName = fileName; httpContent2.Headers.ContentDisposition.Size = memoryStream.Length; var multipart = new System.Net.Http.MultipartContent("mixed"); multipart.Add(httpContent1); multipart.Add(httpContent2); request.Content = multipart; var httpClient = new System.Net.Http.HttpClient(handler); httpClient.BaseAddress = new Uri(url); var result1 = httpClient.SendAsync(request).Result; }