Exemple #1
0
        /// <summary>
        /// Performs content negotiating by selecting the most appropriate <see cref="MediaTypeFormatter"/> out of the passed in
        /// <paramref name="formatters"/> for the given <paramref name="request"/> that can serialize an object of the given
        /// <paramref name="type"/>.
        /// </summary>
        /// <param name="type">The type to be serialized.</param>
        /// <param name="request">The request.</param>
        /// <param name="formatters">The set of <see cref="MediaTypeFormatter"/> objects from which to choose.</param>
        /// <returns>The result of the negotiation containing the most appropriate <see cref="MediaTypeFormatter"/> instance,
        /// or <c>null</c> if there is no appropriate formatter.</returns>
        public virtual ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable <MediaTypeFormatter> formatters)
        {
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            if (formatters == null)
            {
                throw new ArgumentNullException("formatters");
            }

            MediaTypeHeaderValue mediaType;
            MediaTypeFormatter   formatter = RunNegotiation(type, request, formatters, out mediaType);

            if (formatter != null)
            {
                formatter = formatter.GetPerRequestFormatterInstance(type, request, mediaType);
                return(new ContentNegotiationResult(formatter, mediaType));
            }
            return(null);
        }