/// <summary> /// Initializes a new instance of the <see cref="MediaRange"/> class. /// </summary> MediaRange(MediaType type, MediaType subtype, MediaRangeParameters parameters) { Contract.Requires <ArgumentNullException>(parameters != null); this.type = type; this.subtype = subtype; this.parameters = parameters; }
/// <summary> /// Parses a new instance of <see cref="MediaRange"/> from a 'type/subtype' string. /// </summary> /// <param name="value"></param> /// <returns></returns> public static MediaRange Parse(string value) { if (string.IsNullOrWhiteSpace(value)) { return(null); } if (value.Equals("*")) { value = "*/*"; } var parts = value.Split('/', ';'); if (parts.Length < 2) { throw new ArgumentException("Content type not in correct 'type/subType' format.", value); } return(new MediaRange( parts[0], parts[1].TrimEnd(), parts.Length > 2 ? MediaRangeParameters.Parse(value.Substring(value.IndexOf(';'))) : new MediaRangeParameters())); }
/// <summary> /// Whether or not a set of media range parameters matches another, regardless of order /// </summary> /// <param name="other">Other media range parameters</param> /// <returns>True if matching, false if not</returns> public bool Matches(MediaRangeParameters other) { Contract.Requires <ArgumentNullException>(other != null); return(parameters.OrderBy(p => p.Key).SequenceEqual(other.parameters.OrderBy(p => p.Key))); }