/// <summary> /// Determine the best character encoding for writing the response. First we look /// for accept-charset headers and if not found then we try to match /// any charset encoding in the request (in case of PUT, POST, etc.) /// If no encoding is found then we use the default for the formatter. /// </summary> /// <returns>The <see cref="Encoding"/> determined to be the best match.</returns> protected virtual Encoding SelectResponseCharacterEncoding([NotNull] HttpRequestMessage request, [NotNull] MediaTypeFormatter formatter) { // If there are any SupportedEncodings then we pick an encoding List <Encoding> supportedEncodings = formatter.SupportedEncodings.ToList(); if (supportedEncodings.Count > 0) { // Sort Accept-Charset header values IEnumerable <StringWithQualityHeaderValue> sortedAcceptCharsetValues = SortStringWithQualityHeaderValuesByQFactor(request.Headers.AcceptCharset); // Check for match based on accept-charset headers foreach (StringWithQualityHeaderValue acceptCharset in sortedAcceptCharsetValues) { for (int i = 0; i < supportedEncodings.Count; i++) { Encoding encoding = supportedEncodings[i]; if (encoding != null && acceptCharset.Quality != FormattingUtilities.NoMatch && (acceptCharset.Value.Equals(encoding.WebName, StringComparison.OrdinalIgnoreCase) || acceptCharset.Value.Equals("*", StringComparison.OrdinalIgnoreCase))) { return(encoding); } } } // Check for match based on any request entity body return(formatter.SelectCharacterEncoding(request.Content != null ? request.Content.Headers : null)); } return(null); }
/// <summary> /// Determine the best character encoding for writing the response. First we look /// for accept-charset headers and if not found then we try to match /// any charset encoding in the request (in case of PUT, POST, etc.) /// If no encoding is found then we use the default for the formatter. /// </summary> /// <returns>The <see cref="Encoding"/> determined to be the best match.</returns> protected virtual Encoding SelectResponseCharacterEncoding(HttpRequestMessage request, MediaTypeFormatter formatter) { if (request == null) { throw Error.ArgumentNull("request"); } if (formatter == null) { throw Error.ArgumentNull("formatter"); } // If there are any SupportedEncodings then we pick an encoding if (formatter.SupportedEncodings.Count > 0) { // Sort Accept-Charset header values IEnumerable <StringWithQualityHeaderValue> sortedAcceptCharsetValues = SortStringWithQualityHeaderValuesByQFactor(request.Headers.AcceptCharset); // Check for match based on accept-charset headers foreach (StringWithQualityHeaderValue acceptCharset in sortedAcceptCharsetValues) { foreach (Encoding encoding in formatter.SupportedEncodings) { if (encoding != null && acceptCharset.Quality != FormattingUtilities.NoMatch && (acceptCharset.Value.Equals(encoding.WebName, StringComparison.OrdinalIgnoreCase) || acceptCharset.Value.Equals("*", StringComparison.OrdinalIgnoreCase))) { return(encoding); } } } // Check for match based on any request entity body return(formatter.SelectCharacterEncoding(request.Content != null ? request.Content.Headers : null)); } return(null); }
/// <summary> /// Determine the best character encoding for writing the response. First we look /// for accept-charset headers and if not found then we try to match /// any charset encoding in the request (in case of PUT, POST, etc.) /// If no encoding is found then we use the default for the formatter. /// </summary> /// <returns>The <see cref="Encoding"/> determined to be the best match.</returns> protected virtual Encoding SelectResponseCharacterEncoding(HttpRequestMessage request, MediaTypeFormatter formatter) { if (request == null) { throw Error.ArgumentNull("request"); } if (formatter == null) { throw Error.ArgumentNull("formatter"); } // If there are any SupportedEncodings then we pick an encoding if (formatter.SupportedEncodings.Count > 0) { // Sort Accept-Charset header values IEnumerable<StringWithQualityHeaderValue> sortedAcceptCharsetValues = SortStringWithQualityHeaderValuesByQFactor(request.Headers.AcceptCharset); // Check for match based on accept-charset headers foreach (StringWithQualityHeaderValue acceptCharset in sortedAcceptCharsetValues) { foreach (Encoding encoding in formatter.SupportedEncodings) { if (encoding != null && acceptCharset.Quality != FormattingUtilities.NoMatch && (acceptCharset.Value.Equals(encoding.WebName, StringComparison.OrdinalIgnoreCase) || acceptCharset.Value.Equals("*", StringComparison.OrdinalIgnoreCase))) { return encoding; } } } // Check for match based on any request entity body return formatter.SelectCharacterEncoding(request.Content != null ? request.Content.Headers : null); } return null; }
/// <summary> /// Determine the best character encoding for writing the response. First we look /// for accept-charset headers and if not found then we try to match /// any charset encoding in the request (in case of PUT, POST, etc.) /// If no encoding is found then we use the default for the formatter. /// </summary> /// <returns>The <see cref="Encoding"/> determined to be the best match.</returns> protected virtual Encoding SelectResponseCharacterEncoding( HttpRequestMessage request, MediaTypeFormatter formatter) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (formatter == null) { throw new ArgumentNullException(nameof(formatter)); } // If there are any SupportedEncodings then we pick an encoding var supportedEncodings = formatter.SupportedEncodings.ToList(); if (supportedEncodings.Count > 0) { // Sort Accept-Charset header values var sortedAcceptCharsetValues = SortStringWithQualityHeaderValuesByQFactor(request.Headers.AcceptCharset); // Check for match based on accept-charset headers foreach (StringWithQualityHeaderValue acceptCharset in sortedAcceptCharsetValues) { for (var i = 0; i < supportedEncodings.Count; i++) { var encoding = supportedEncodings[i]; if (encoding != null && acceptCharset.Quality != FormattingUtilities.NoMatch && (acceptCharset.Value.Equals(encoding.WebName, StringComparison.OrdinalIgnoreCase) || acceptCharset.Value.Equals("*", StringComparison.Ordinal))) { return encoding; } } } // Check for match based on any request entity body return formatter.SelectCharacterEncoding(request.Content != null ? request.Content.Headers : null); } return null; }