Exemplo n.º 1
0
 public static bool HasFileContentDisposition(ContentDispositionHeaderValue?contentDisposition)
 {
     // Content-Disposition: form-data; name="myfile1"; filename="Misc 002.jpg"
     return(contentDisposition != null &&
            contentDisposition.DispositionType.Equals("form-data") &&
            (!string.IsNullOrEmpty(contentDisposition.FileName.Value) ||
             !string.IsNullOrEmpty(contentDisposition.FileNameStar.Value)));
 }
Exemplo n.º 2
0
 public static bool HasFormDataContentDisposition(ContentDispositionHeaderValue?contentDisposition)
 {
     // Content-Disposition: form-data; name="key";
     return(contentDisposition != null &&
            contentDisposition.DispositionType.Equals("form-data") &&
            string.IsNullOrEmpty(contentDisposition.FileName.Value) &&
            string.IsNullOrEmpty(contentDisposition.FileNameStar.Value));
 }
Exemplo n.º 3
0
        /// <summary>
        /// Creates a new instance of the <see cref="FormMultipartSection"/> class
        /// </summary>
        /// <param name="section">The section from which to create the <see cref="FormMultipartSection"/></param>
        /// <param name="header">An already parsed content disposition header</param>
        public FormMultipartSection(MultipartSection section, ContentDispositionHeaderValue?header)
        {
            if (header == null || !header.IsFormDisposition())
            {
                throw new ArgumentException("Argument must be a form section", nameof(section));
            }

            Section = section;
            _contentDispositionHeader = header;
            Name = HeaderUtilities.RemoveQuotes(_contentDispositionHeader.Name).ToString();
        }
Exemplo n.º 4
0
        public override bool Equals([NotNullWhen(true)] object?obj)
        {
            ContentDispositionHeaderValue?other = obj as ContentDispositionHeaderValue;

            if (other == null)
            {
                return(false);
            }

            return(string.Equals(_dispositionType, other._dispositionType, StringComparison.OrdinalIgnoreCase) &&
                   HeaderUtilities.AreEqualCollections(_parameters, other._parameters));
        }
Exemplo n.º 5
0
        public static bool TryParse([NotNullWhen(true)] string?input, [NotNullWhen(true)] out ContentDispositionHeaderValue?parsedValue)
        {
            int index = 0;

            parsedValue = null;

            if (GenericHeaderParser.ContentDispositionParser.TryParseValue(input, null, ref index, out object?output))
            {
                parsedValue = (ContentDispositionHeaderValue)output !;
                return(true);
            }
            return(false);
        }
Exemplo n.º 6
0
    /// <summary>
    /// Creates a new instance of the <see cref="FileMultipartSection"/> class
    /// </summary>
    /// <param name="section">The section from which to create the <see cref="FileMultipartSection"/></param>
    /// <param name="header">An already parsed content disposition header</param>
    public FileMultipartSection(MultipartSection section, ContentDispositionHeaderValue?header)
    {
        if (header is null || !header.IsFileDisposition())
        {
            throw new ArgumentException("Argument must be a file section", nameof(section));
        }

        Section = section;
        _contentDispositionHeader = header;

        Name     = HeaderUtilities.RemoveQuotes(_contentDispositionHeader.Name).ToString();
        FileName = HeaderUtilities.RemoveQuotes(
            _contentDispositionHeader.FileNameStar.HasValue ?
            _contentDispositionHeader.FileNameStar :
            _contentDispositionHeader.FileName).ToString();
    }
    private static int GetDispositionTypeLength(StringSegment input, int startIndex, out ContentDispositionHeaderValue?parsedValue)
    {
        Contract.Requires(startIndex >= 0);

        parsedValue = null;

        if (StringSegment.IsNullOrEmpty(input) || (startIndex >= input.Length))
        {
            return(0);
        }

        // Caller must remove leading whitespaces. If not, we'll return 0.
        var dispositionTypeLength = GetDispositionTypeExpressionLength(input, startIndex, out var dispositionType);

        if (dispositionTypeLength == 0)
        {
            return(0);
        }

        var current = startIndex + dispositionTypeLength;

        current = current + HttpRuleParser.GetWhitespaceLength(input, current);
        var contentDispositionHeader = new ContentDispositionHeaderValue();

        contentDispositionHeader._dispositionType = dispositionType;

        // If we're not done and we have a parameter delimiter, then we have a list of parameters.
        if ((current < input.Length) && (input[current] == ';'))
        {
            current++; // skip delimiter.
            int parameterLength = NameValueHeaderValue.GetNameValueListLength(input, current, ';',
                                                                              contentDispositionHeader.Parameters);

            parsedValue = contentDispositionHeader;
            return(current + parameterLength - startIndex);
        }

        // We have a ContentDisposition header without parameters.
        parsedValue = contentDispositionHeader;
        return(current - startIndex);
    }
    /// <summary>
    /// Attempts to parse the specified <paramref name="input"/> as a <see cref="ContentDispositionHeaderValue"/>.
    /// </summary>
    /// <param name="input">The value to parse.</param>
    /// <param name="parsedValue">The parsed value.</param>
    /// <returns><see langword="true"/> if input is a valid <see cref="ContentDispositionHeaderValue"/>, otherwise <see langword="false"/>.</returns>
    public static bool TryParse(StringSegment input, [NotNullWhen(true)] out ContentDispositionHeaderValue?parsedValue)
    {
        var index = 0;

        return(Parser.TryParseValue(input, ref index, out parsedValue !));
    }