private static Encoding EncodingFromName(string name) { Encoding encodingFromCharsetName = HttpUtils.GetEncodingFromCharsetName(name); if (encodingFromCharsetName == null) { throw new ODataException(Strings.MediaType_EncodingNotSupported(name)); } return(encodingFromCharsetName); }
/// <summary>Gets the named encoding if specified.</summary> /// <param name="name">Name (possibly null or empty).</param> /// <returns> /// The named encoding if specified; the encoding for HTTP missing /// charset specification otherwise. /// </returns> /// <remarks> /// See http://tools.ietf.org/html/rfc2616#section-3.4.1 for details. /// </remarks> private static Encoding EncodingFromName(string name) { Debug.Assert(!string.IsNullOrEmpty(name), "!string.IsNullOrEmpty(name)"); Debug.Assert(name.Trim() == name, "Should already be trimmed."); Encoding result = HttpUtils.GetEncodingFromCharsetName(name); if (result == null) { throw new ODataException(Strings.MediaType_EncodingNotSupported(name)); } return(result); }
/// <summary> /// Gets all payload kinds and their corresponding formats that match the specified content type header. /// </summary> /// <param name="contentTypeHeader">The content type header to get the payload kinds for.</param> /// <param name="mediaTypeResolver">The media type resolver to use when interpreting the content type.</param> /// <param name="contentType">The parsed content type as <see cref="MediaType"/>.</param> /// <param name="encoding">The encoding from the content type or the default encoding from <see cref="MediaType" />.</param> /// <returns>The list of payload kinds and formats supported for the specified <paramref name="contentTypeHeader"/>.</returns> internal static IList <ODataPayloadKindDetectionResult> GetPayloadKindsForContentType(string contentTypeHeader, MediaTypeResolver mediaTypeResolver, out MediaType contentType, out Encoding encoding) { DebugUtils.CheckNoExternalCallers(); Debug.Assert(!String.IsNullOrEmpty(contentTypeHeader), "Content-Type header must not be null or empty."); string charset; encoding = null; contentType = ParseContentType(contentTypeHeader, out charset); MediaType[] targetTypes = new MediaType[] { contentType }; List <ODataPayloadKindDetectionResult> payloadKinds = new List <ODataPayloadKindDetectionResult>(); IList <MediaTypeWithFormat> mediaTypesForKind = null; for (int i = 0; i < allSupportedPayloadKinds.Length; ++i) { // get the supported and default media types for the current payload kind ODataPayloadKind payloadKind = allSupportedPayloadKinds[i]; mediaTypesForKind = mediaTypeResolver.GetMediaTypesForPayloadKind(payloadKind); // match the specified media types against the supported/default ones // and get the format MediaTypeMatchInfo matchInfo = MatchMediaTypes(mediaTypesForKind.Select(smt => smt.MediaType), targetTypes); if (matchInfo != null) { Debug.Assert(matchInfo.TargetTypeIndex == 0, "Invalid target type index detected."); payloadKinds.Add(new ODataPayloadKindDetectionResult(payloadKind, mediaTypesForKind[matchInfo.SourceTypeIndex].Format)); } } if (!String.IsNullOrEmpty(charset)) { encoding = HttpUtils.GetEncodingFromCharsetName(charset); } return(payloadKinds); }