public async Task WriteResultToResponse(IDictionary<string, object> environment, object @object, ContentNegotiatorResult result) { var stream = new MemoryStream(); await result.Formatter.WriteToStreamAsync(@object.GetType(), @object, stream, null, null); var responseHeaders = environment["owin.ResponseHeaders"] as IDictionary<string, string[]>; responseHeaders.Add("content-type", new[] { result.MediaType }); stream.Position = 0; var response = environment["owin.ResponseBody"] as Stream; await stream.CopyToAsync(response); }
private ContentNegotiatorResult GetContentTypeFormatter(Type type, IDictionary<string, string[]> headers, IEnumerable<MediaTypeFormatter> formatters) { ContentNegotiatorResult result = null; var contentTypeHeader = headers.Where(h => string.Equals(h.Key, "content-type", StringComparison.OrdinalIgnoreCase)); var jsonFormatter = formatters.FirstOrDefault(f => f is JsonMediaTypeFormatter); var xmlFormatter = formatters.FirstOrDefault(f => f is XmlMediaTypeFormatter); if (contentTypeHeader.Any() && contentTypeHeader.First().Value.Any(v => v.Equals(JsonMimeType, StringComparison.OrdinalIgnoreCase)) && jsonFormatter != null)//Has json content-type result = new ContentNegotiatorResult(jsonFormatter, JsonMimeType); else if (contentTypeHeader.Any() && contentTypeHeader.First().Value.Any(v => XmlMimeTypes.FirstOrDefault(xml => v.Equals(xml, StringComparison.OrdinalIgnoreCase)) != null))//Has xml content-type result = new ContentNegotiatorResult(xmlFormatter, XmlMimeTypes.First()); return result; }