コード例 #1
0
        static HttpContent GetStreamContent(HttpRequestBase requestBase)
        {
            if (true)
            {
                return(new LazyStreamContent(() =>
                {
                    if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.None)
                    {
                        return new SeekableBufferedRequestStream(requestBase);
                    }

                    if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Classic)
                    {
                        requestBase.InputStream.Position = 0;
                        return requestBase.InputStream;
                    }

                    if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Buffered)
                    {
                        if (requestBase.GetBufferedInputStream().Position > 0)
                        {
                            // If GetBufferedInputStream() was completely read, we can continue accessing it via Request.InputStream.
                            // If it was partially read, accessing InputStream will throw, but at that point we have no
                            // way of recovering.
                            requestBase.InputStream.Position = 0;
                            return requestBase.InputStream;
                        }
                        return new SeekableBufferedRequestStream(requestBase);
                    }

                    throw new InvalidOperationException("Request body already read in mode.");
                }));
            }
        }
コード例 #2
0
        public SeekableBufferedRequestStream(HttpRequestBase request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            _request    = request;
            InnerStream = request.GetBufferedInputStream();
        }
コード例 #3
0
        public SeekableBufferedRequestStream(HttpRequestBase request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            _request = request;
            InnerStream = request.GetBufferedInputStream();
        }
コード例 #4
0
 //
 // Summary:
 //     Gets a System.IO.Stream object that can be used to read the incoming HTTP entity
 //     body.
 //
 // Returns:
 //     A System.IO.Stream object that can be used to read the incoming HTTP entity body.
 //
 // Exceptions:
 //   T:System.Web.HttpException:
 //     The request's entity body has already been loaded and parsed. Examples of properties
 //     that cause the entity body to be loaded and parsed include the following: The
 //     System.Web.HttpRequest.Form property.The System.Web.HttpRequest.Files property.The
 //     System.Web.HttpRequest.InputStream property.The System.Web.HttpRequest.GetBufferlessInputStream
 //     method.To avoid this exception, call the System.Web.HttpRequest.ReadEntityBodyMode
 //     method first. This exception is also thrown if the client disconnects while the
 //     entity body is being read.
 public Stream GetBufferedInputStream()
 {
     if (_httpRequest != null)
     {
         return(_httpRequest.GetBufferedInputStream());
     }
     else
     {
         return(_httpRequestBase.GetBufferedInputStream());
     }
 }
コード例 #5
0
        private void ResolveStream()
        {
            if (_stream != null)
            {
                return;
            }
            switch (_request.ReadEntityBodyMode)
            {
            case ReadEntityBodyMode.None:
                _stream = _preferBuffered
                        ? _request.GetBufferedInputStream()
                        : _request.GetBufferlessInputStream();
                _bufferOnSeek = _preferBuffered;
                break;

            case ReadEntityBodyMode.Buffered:
                _stream = _request.GetBufferedInputStream();
                try
                {
                    // Fully consumed? Switch to Seekable InputStream.
                    _stream = _request.InputStream;
                }
                catch (InvalidOperationException)
                {
                    // The stream is starting in a partially read state.
                    _bufferOnSeek = _preferBuffered;
                }
                break;

            case ReadEntityBodyMode.Classic:
                _stream = _request.InputStream;
                break;

            case ReadEntityBodyMode.Bufferless:
                _stream = _request.GetBufferlessInputStream();
                break;

            default:
                throw new NotImplementedException(_request.ReadEntityBodyMode.ToString());
            }
        }
コード例 #6
0
        private void AuthenticateUsingSharedSecret(HttpRequestBase request)
        {
            using (var sr = new StreamReader(request.GetBufferedInputStream(), request.ContentEncoding))
            {
                var bodyContent = sr.ReadToEnd();
                if (!bodyContent.StartsWith("secret:"))
                {
                    return;
                }

                var secret = bodyContent.Replace("secret:", string.Empty).Trim();
                if (secret != this._sharedKey)
                {
                    return;
                }
            }
            // secretトークンが一致
            CreateClaimsForScheduler();
        }
コード例 #7
0
        /// <summary>
        /// Gets the stream after resetting by calling the GetBufferedInputStream()
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">request</exception>
        private static Stream GetStreamAfterResetting([NotNull] HttpRequestBase request)
        {
            if (null == request)
            {
                throw new ArgumentNullException("request");
            }
            try
            {
                // See http://stackoverflow.com/questions/17602845/post-error-either-binaryread-form-files-or-inputstream-was-accessed-before-t
                var bufferedStream = request.GetBufferedInputStream();
                if (null == bufferedStream)
                {
                    return(null);
                }

                new StreamReader(bufferedStream).ReadToEnd();
            }
            catch (HttpException)
            {
                // let's not log in the logger to avoid potential infinite loop
            }
            return(request.InputStream);
        }
コード例 #8
0
 private static HttpContent GetStreamContent(HttpRequestBase requestBase, bool bufferInput)
 {
     if (bufferInput)
     {
         return(new LazyStreamContent(() =>
         {
             if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.None)
             {
                 return new SeekableBufferedRequestStream(requestBase);
             }
             else if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Classic)
             {
                 requestBase.InputStream.Position = 0;
                 return requestBase.InputStream;
             }
             else if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Buffered)
             {
                 if (requestBase.GetBufferedInputStream().Position > 0)
                 {
                     // If GetBufferedInputStream() was completely read, we can continue accessing it via Request.InputStream.
                     // If it was partially read, accessing InputStream will throw, but at that point we have no
                     // way of recovering.
                     requestBase.InputStream.Position = 0;
                     return requestBase.InputStream;
                 }
                 return new SeekableBufferedRequestStream(requestBase);
             }
             else
             {
                 Contract.Assert(requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Bufferless);
                 throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                                   SRResources.RequestBodyAlreadyReadInMode,
                                                                   ReadEntityBodyMode.Bufferless));
             }
         }));
     }
     else
     {
         return(new LazyStreamContent(() =>
         {
             if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.None)
             {
                 return requestBase.GetBufferlessInputStream();
             }
             else if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Classic)
             {
                 // The user intended that the request be read in a bufferless manner, but we are starting with a buffered stream.
                 // To maintain compatibility with legacy behavior, we'll throw in this case.
                 throw new InvalidOperationException(SRResources.RequestStreamCannotBeReadBufferless);
             }
             else if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Bufferless)
             {
                 Stream bufferlessInputStream = requestBase.GetBufferlessInputStream();
                 if (bufferlessInputStream.Position > 0)
                 {
                     throw new InvalidOperationException(SRResources.RequestBodyAlreadyRead);
                 }
                 return bufferlessInputStream;
             }
             else
             {
                 Contract.Assert(requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Buffered);
                 throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, SRResources.RequestBodyAlreadyReadInMode, ReadEntityBodyMode.Buffered));
             }
         }));
     }
 }
コード例 #9
0
 private static HttpContent GetStreamContent(HttpRequestBase requestBase, bool bufferInput)
 {
     if (bufferInput)
     {
         return new LazyStreamContent(() =>
         {
             if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.None)
             {
                 return new SeekableBufferedRequestStream(requestBase);
             }
             else if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Classic)
             {
                 requestBase.InputStream.Position = 0;
                 return requestBase.InputStream;
             }
             else if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Buffered)
             {
                 if (requestBase.GetBufferedInputStream().Position > 0)
                 {
                     // If GetBufferedInputStream() was completely read, we can continue accessing it via Request.InputStream.
                     // If it was partially read, accessing InputStream will throw, but at that point we have no
                     // way of recovering.
                     requestBase.InputStream.Position = 0;
                     return requestBase.InputStream;
                 }
                 return new SeekableBufferedRequestStream(requestBase);
             }
             else
             {
                 Contract.Assert(requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Bufferless);
                 throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                                   SRResources.RequestBodyAlreadyReadInMode,
                                                                   ReadEntityBodyMode.Bufferless));
             }
         });
     }
     else
     {
         return new LazyStreamContent(() =>
         {
             if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.None)
             {
                 return requestBase.GetBufferlessInputStream();
             }
             else if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Classic)
             {
                 // The user intended that the request be read in a bufferless manner, but we are starting with a buffered stream.
                 // To maintain compatibility with legacy behavior, we'll throw in this case.
                 throw new InvalidOperationException(SRResources.RequestStreamCannotBeReadBufferless);
             }
             else if (requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Bufferless)
             {
                 Stream bufferlessInputStream = requestBase.GetBufferlessInputStream();
                 if (bufferlessInputStream.Position > 0)
                 {
                     throw new InvalidOperationException(SRResources.RequestBodyAlreadyRead);
                 }
                 return bufferlessInputStream;
             }
             else
             {
                 Contract.Assert(requestBase.ReadEntityBodyMode == ReadEntityBodyMode.Buffered);
                 throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, SRResources.RequestBodyAlreadyReadInMode, ReadEntityBodyMode.Buffered));
             }
         });
     }
 }
コード例 #10
0
 public override Stream GetBufferedInputStream() => request.GetBufferedInputStream();