/// <summary>Builds a Content-Type given the mime type and all the parameters.</summary> /// <param name="mimeType">The MIME type in standard type/subtype form, without parameters.</param> /// <param name="parameters">Parameters to be appended in the mime type.</param> /// <returns>content type containing the mime type and all the parameters.</returns> internal static string WriteContentType(string mimeType, MediaParameter[] parameters) { Debug.Assert(!string.IsNullOrEmpty(mimeType), "!string.IsNullOrEmpty(mimeType)"); Debug.Assert(parameters != null, "parameters != null"); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(mimeType); foreach (var parameter in parameters) { stringBuilder.Append(';'); stringBuilder.Append(parameter.Name); stringBuilder.Append("="); stringBuilder.Append(parameter.GetOriginalValue()); } return stringBuilder.ToString(); }
/// <summary>Read a parameter for a media type/range.</summary> /// <param name="text">Text to read from.</param> /// <param name="textIndex">Pointer in text.</param> /// <param name="parameters">Array with parameters to grow as necessary.</param> private static void ReadMediaTypeParameter(string text, ref int textIndex, ref MediaParameter[] parameters) { int startIndex = textIndex; if (ReadToken(text, ref textIndex)) { throw Error.HttpHeaderFailure(400, Strings.HttpProcessUtility_MediaTypeMissingValue); } string parameterName = text.Substring(startIndex, textIndex - startIndex); if (text[textIndex] != '=') { throw Error.HttpHeaderFailure(400, Strings.HttpProcessUtility_MediaTypeMissingValue); } textIndex++; MediaParameter parameter = ReadQuotedParameterValue(parameterName, text, ref textIndex); // Add the parameter name/value pair to the list. if (parameters == null) { parameters = new MediaParameter[1]; } else { var grow = new MediaParameter[parameters.Length + 1]; Array.Copy(parameters, grow, parameters.Length); parameters = grow; } parameters[parameters.Length - 1] = parameter; }
/// <summary> /// Initializes a new <see cref="MediaType"/> read-only instance. /// </summary> /// <param name="type">Type specification (for example, 'text').</param> /// <param name="subType">Sub-type specification (for example, 'plain').</param> /// <param name="parameters">Parameters specified on the media type.</param> internal MediaType(string type, string subType, MediaParameter[] parameters) { Debug.Assert(type != null, "type != null"); Debug.Assert(subType != null, "subType != null"); this.type = type; this.subType = subType; this.parameters = parameters; }