/// <summary>
        /// Instantiate the object without supplying a stream.  Useful for HEAD responses.
        /// </summary>
        /// <param name="ctx">S3 context.</param>
        public S3Response(S3Context ctx)
        {
            if (ctx == null)
            {
                throw new ArgumentNullException(nameof(ctx));
            }

            _Http    = ctx.Http;
            _Request = ctx.Request;
        }
        /// <summary>
        /// Instantiate the object.
        /// </summary>
        /// <param name="ctx">HTTP context.</param>
        /// <param name="baseDomains">List of base domains, if any.</param>
        /// <param name="metadata">User metadata, provided by your application.</param>
        /// <param name="logger">Method to invoke to send log messages.</param>
        public S3Context(HttpContext ctx, List <string> baseDomains = null, object metadata = null, Action <string> logger = null)
        {
            if (ctx == null)
            {
                throw new ArgumentNullException(nameof(ctx));
            }

            Metadata = metadata;
            Http     = ctx;
            Request  = new S3Request(this, baseDomains, logger);
            Response = new S3Response(this);
        }
        /// <summary>
        /// Instantiate the object without supplying a stream.  Useful for HEAD responses.
        /// </summary>
        /// <param name="ctx">S3 context.</param>
        /// <param name="statusCode">HTTP status code.</param>
        /// <param name="contentType">Content-type.</param>
        /// <param name="headers">HTTP headers.</param>
        /// <param name="contentLength">Content length.</param>
        public S3Response(S3Context ctx, int statusCode = 200, string contentType = "text/plain", Dictionary <string, string> headers = null, long contentLength = 0)
        {
            if (ctx == null)
            {
                throw new ArgumentNullException(nameof(ctx));
            }

            _Http    = ctx.Http;
            _Request = ctx.Request;

            StatusCode    = statusCode;
            ContentType   = contentType;
            ContentLength = contentLength;
            Chunked       = _Request.Chunked;
        }