internal static ExtendedMediaType GetExtendedMediaType(string mediaType, params string[] nonCanonicalMediaTypePatterns) { Match match = null; var matched = nonCanonicalMediaTypePatterns.Any(mtp => { match = Regex.Match(mediaType, mtp); return(match.Success); }); if (matched) { var extendedMediaType = new ExtendedMediaType(); extendedMediaType.DomainModel = match.Groups[3].Value; extendedMediaType.Version = match.Groups[5].Value; extendedMediaType.Format = match.Groups[1].Value + "/" + match.Groups[6].Value; extendedMediaType.Schema = string.IsNullOrEmpty(match.Groups[3].Value) ? extendedMediaType.Format : string.Format("{0}/{1}+{2}", match.Groups[1].Value, match.Groups[3].Value, match.Groups[6].Value); extendedMediaType.IsText = match.Groups[1].Value.ToLower().IsIn(new [] { "text" }) || match.Groups[6].Value.ToLower().IsIn(new[] { "xml", "json", "xml-dtd", "javascript", "http", "rfc822" }); return(extendedMediaType); } else { return(null); } }
public static ExtendedMediaType ExtractFiveLevelsOfMediaType(this MediaTypeHeaderValue header, params string[] nonCanonicalMediaTypePatterns) { if (header == null) return null; if(nonCanonicalMediaTypePatterns.Length==0) nonCanonicalMediaTypePatterns = new []{FiveLevelsOfMediaTypeFormatter.DefaultNonCanonicalMediaTypePattern}; var extendedMediaType = GetExtendedMediaType(header.MediaType, nonCanonicalMediaTypePatterns); if (extendedMediaType != null && !string.IsNullOrEmpty(extendedMediaType.DomainModel)) return extendedMediaType; if (header.Parameters.Count == 0) return null; extendedMediaType = new ExtendedMediaType(); var domainModel = header.Parameters.FirstOrDefault(x => x.Name.Equals(FiveLevelsOfMediaTypeParameters.DomainModel)); var format = header.Parameters.FirstOrDefault(x => x.Name.Equals(FiveLevelsOfMediaTypeParameters.Format)); var isText = header.Parameters.FirstOrDefault(x => x.Name.Equals(FiveLevelsOfMediaTypeParameters.IsText)); var schema = header.Parameters.FirstOrDefault(x => x.Name.Equals(FiveLevelsOfMediaTypeParameters.Schema)); var version = header.Parameters.FirstOrDefault(x => x.Name.Equals(FiveLevelsOfMediaTypeParameters.Version)); extendedMediaType.DomainModel = domainModel == null ? string.Empty : HttpUtility.UrlDecode( domainModel.Value); extendedMediaType.Format = format == null ? string.Empty : HttpUtility.UrlDecode(format.Value); extendedMediaType.IsText = isText == null ? null : (bool?) Convert.ToBoolean(isText.Value); extendedMediaType.Schema = schema == null ? string.Empty : HttpUtility.UrlDecode(schema.Value); extendedMediaType.Version = version == null ? string.Empty : HttpUtility.UrlDecode(version.Value); return extendedMediaType; }
public static ExtendedMediaType ExtractFiveLevelsOfMediaType(this MediaTypeHeaderValue header, params string[] nonCanonicalMediaTypePatterns) { if (header == null) { return(null); } if (nonCanonicalMediaTypePatterns.Length == 0) { nonCanonicalMediaTypePatterns = new [] { FiveLevelsOfMediaTypeFormatter.DefaultNonCanonicalMediaTypePattern } } ; var extendedMediaType = GetExtendedMediaType(header.MediaType, nonCanonicalMediaTypePatterns); if (extendedMediaType != null && !string.IsNullOrEmpty(extendedMediaType.DomainModel)) { return(extendedMediaType); } if (header.Parameters.Count == 0) { return(null); } extendedMediaType = new ExtendedMediaType(); var domainModel = header.Parameters.FirstOrDefault(x => x.Name.Equals(FiveLevelsOfMediaTypeParameters.DomainModel)); var format = header.Parameters.FirstOrDefault(x => x.Name.Equals(FiveLevelsOfMediaTypeParameters.Format)); var isText = header.Parameters.FirstOrDefault(x => x.Name.Equals(FiveLevelsOfMediaTypeParameters.IsText)); var schema = header.Parameters.FirstOrDefault(x => x.Name.Equals(FiveLevelsOfMediaTypeParameters.Schema)); var version = header.Parameters.FirstOrDefault(x => x.Name.Equals(FiveLevelsOfMediaTypeParameters.Version)); extendedMediaType.DomainModel = domainModel == null ? string.Empty : HttpUtility.UrlDecode( domainModel.Value); extendedMediaType.Format = format == null ? string.Empty : HttpUtility.UrlDecode(format.Value); extendedMediaType.IsText = isText == null ? null : (bool?)Convert.ToBoolean(isText.Value); extendedMediaType.Schema = schema == null ? string.Empty : HttpUtility.UrlDecode(schema.Value); extendedMediaType.Version = version == null ? string.Empty : HttpUtility.UrlDecode(version.Value); return(extendedMediaType); }
internal static ExtendedMediaType GetExtendedMediaType(string mediaType, params string[] nonCanonicalMediaTypePatterns) { Match match = null; var matched = nonCanonicalMediaTypePatterns.Any(mtp => { match = Regex.Match(mediaType, mtp); return match.Success; }); if (matched) { var extendedMediaType = new ExtendedMediaType(); extendedMediaType.DomainModel = match.Groups[3].Value; extendedMediaType.Version = match.Groups[5].Value; extendedMediaType.Format = match.Groups[1].Value + "/" + match.Groups[6].Value; extendedMediaType.Schema = string.IsNullOrEmpty(match.Groups[3].Value) ? extendedMediaType.Format : string.Format("{0}/{1}+{2}", match.Groups[1].Value, match.Groups[3].Value, match.Groups[6].Value); extendedMediaType.IsText = match.Groups[1].Value.ToLower().IsIn(new []{"text"}) || match.Groups[6].Value.ToLower().IsIn(new[] { "xml", "json", "xml-dtd", "javascript", "http", "rfc822" }); return extendedMediaType; } else { return null; } }