private static GetMediaTypeExpressionLength ( string input, int startIndex, string &mediaType ) : int | ||
input | string | |
startIndex | int | |
mediaType | string | |
리턴 | int |
internal static int GetMediaTypeLength(string input, int startIndex, Func <MediaTypeHeaderValue> mediaTypeCreator, out MediaTypeHeaderValue parsedValue) { Contract.Requires(mediaTypeCreator != null); Contract.Requires(startIndex >= 0); parsedValue = null; if (string.IsNullOrEmpty(input) || (startIndex >= input.Length)) { return(0); } // Caller must remove leading whitespaces. If not, we'll return 0. string mediaType = null; int mediaTypeLength = MediaTypeHeaderValue.GetMediaTypeExpressionLength(input, startIndex, out mediaType); if (mediaTypeLength == 0) { return(0); } int current = startIndex + mediaTypeLength; current = current + HttpRuleParser.GetWhitespaceLength(input, current); MediaTypeHeaderValue mediaTypeHeader = null; // If we're not done and we have a parameter delimiter, then we have a list of parameters. if ((current < input.Length) && (input[current] == ';')) { mediaTypeHeader = mediaTypeCreator(); mediaTypeHeader.mediaType = mediaType; current++; // skip delimiter. int parameterLength = NameValueHeaderValue.GetNameValueListLength(input, current, ';', mediaTypeHeader.Parameters); if (parameterLength == 0) { return(0); } parsedValue = mediaTypeHeader; return(current + parameterLength - startIndex); } // We have a media type without parameters. mediaTypeHeader = mediaTypeCreator(); mediaTypeHeader.mediaType = mediaType; parsedValue = mediaTypeHeader; return(current - startIndex); }
private static void CheckMediaTypeFormat(string mediaType, string parameterName) { if (string.IsNullOrEmpty(mediaType)) { throw new ArgumentException(SR.net_http_argument_empty_string, parameterName); } string mediaType1; if (MediaTypeHeaderValue.GetMediaTypeExpressionLength(mediaType, 0, out mediaType1) == 0 || mediaType1.Length != mediaType.Length) { throw new FormatException(SR.Format((IFormatProvider)CultureInfo.InvariantCulture, SR.net_http_headers_invalid_value, (object)mediaType)); } }
internal static int GetMediaTypeLength( string input, int startIndex, Func <MediaTypeHeaderValue> mediaTypeCreator, out MediaTypeHeaderValue parsedValue) { parsedValue = (MediaTypeHeaderValue)null; if (string.IsNullOrEmpty(input) || startIndex >= input.Length) { return(0); } string mediaType = (string)null; int expressionLength = MediaTypeHeaderValue.GetMediaTypeExpressionLength(input, startIndex, out mediaType); if (expressionLength == 0) { return(0); } int startIndex1 = startIndex + expressionLength; int index = startIndex1 + HttpRuleParser.GetWhitespaceLength(input, startIndex1); if (index < input.Length && input[index] == ';') { MediaTypeHeaderValue mediaTypeHeaderValue = mediaTypeCreator(); mediaTypeHeaderValue._mediaType = mediaType; int startIndex2 = index + 1; int nameValueListLength = NameValueHeaderValue.GetNameValueListLength(input, startIndex2, ';', (ObjectCollection <NameValueHeaderValue>)mediaTypeHeaderValue.Parameters); if (nameValueListLength == 0) { return(0); } parsedValue = mediaTypeHeaderValue; return(startIndex2 + nameValueListLength - startIndex); } MediaTypeHeaderValue mediaTypeHeaderValue1 = mediaTypeCreator(); mediaTypeHeaderValue1._mediaType = mediaType; parsedValue = mediaTypeHeaderValue1; return(index - startIndex); }