public MediaTypeFormatter SelectWriteFormatter(Type type, FormatterContext formatterContext, IEnumerable <MediaTypeFormatter> formatters, out MediaTypeHeaderValue mediaType) { string descriptFormatterContext = GetDescriptFormatterContext(formatterContext); Console.WriteLine("Selecting Write Formatter for type {0} based on formatter context: {1}", type.Name, descriptFormatterContext); var mediaTypeFormatter = _FormatterSelector.SelectWriteFormatter(type, formatterContext, formatters, out mediaType); Console.WriteLine("Selected Write Formatter : {0} {1}", mediaTypeFormatter.GetType().Name, mediaType); return(mediaTypeFormatter); }
public static Tuple <MediaTypeFormatter, MediaTypeHeaderValue> Negotiate <T>( this MediaTypeFormatterCollection formatters, HttpRequestMessage requestMessage) { var formatSelector = new FormatterSelector(); MediaTypeHeaderValue mediaType = null; var response = new HttpResponseMessage() { RequestMessage = requestMessage }; var formatter = formatSelector.SelectWriteFormatter( typeof(T), new FormatterContext(response, false), formatters, out mediaType); return (new Tuple <MediaTypeFormatter, MediaTypeHeaderValue>( formatter, mediaType )); /* * Usage: * public HttpResponseMessage Get() { * * var response = new HttpResponseMessage(); * * var contact = new Contact() {FirstName = "Joe", LastName = "Brown"}; * * var mediaInfo = Configuration.Formatters.Negotiate<Contact>(Request); * * response.Content = new SimpleObjectContent<Contact>(contact, mediaInfo.Item1); * response.Content.Headers.ContentType = mediaInfo.Item2; * * return response; * } */ }