private static bool TryParseInternal(string componentText, bool throwExceptions, out MediaType result) { result = null; if (componentText == null) { if (throwExceptions) throw new ArgumentNullException("componentText"); return false; } if (componentText == "") { if (throwExceptions) throw new ArgumentException("componentText"); return false; } var priority = 1.0f; // default priority var encodingSpecified = false; Encoding encoding = null; var parts = componentText.Split(';'); var mediaRange = parts[0]; var typeParts = mediaRange.Split(new[] { '/' }, 2); if (typeParts.Length != 2) { if (throwExceptions) throw new ArgumentException("componentText"); return false; } var mediaType = typeParts[0]; var mediaSubtype = typeParts[1]; if (parts.Length > 1) { for (var i = 1; i < parts.Length; i++) { var part = parts[i].ToLowerInvariant().Trim(); if (part.StartsWith("q=")) { var quality = part.Substring(2); float q; if (float.TryParse(quality, NumberStyles.Float, CultureInfo.InvariantCulture, out q)) { priority = q; } } else if (part.StartsWith("charset=")) { encodingSpecified = true; try { var encName = part.Substring(8); encoding = encName.Equals("utf-8", StringComparison.OrdinalIgnoreCase) ? Helper.UTF8NoBom : Encoding.GetEncoding(encName); } catch (ArgumentException) { encoding = null; } } } } result = new MediaType(mediaRange, mediaType, mediaSubtype, priority, encodingSpecified, encoding); return true; }
public static bool TryParse(string componentText, out MediaType result) { return TryParseInternal(componentText, false, out result); }