How to enable setting the request headers for Get and Delete in Amazon SDK for .NET

From the source code, modify the below files:

AWSSDK_DotNet35\Amazon.S3\Model\Internal\MarshallTransformations\GetObjectRequestMarshaller.cs

AWSSDK_DotNet35\Amazon.S3\Model\Internal\MarshallTransformations\DeleteObjectRequestMarshaller.cs

Modify the public IRequest Marshall(<parameter>) method by adding the below statements:

var headers = <requestObject>.Headers;
foreach (var key in headers.Keys)
      request.Headers[key] = headers[key];

You will need to add the property for the headers to the classes (directly - not in their base classes):

private HeadersCollection headersCollection = new HeadersCollection();

/// <summary>
        /// The collection of headers for the request.
        /// </summary>
        public HeadersCollection Headers
        {
            get
            {
                if (this.headersCollection == null)
                    this.headersCollection = new HeadersCollection();
                return this.headersCollection;
            }
            internal set
            {
                this.headersCollection = value;
            }
        }

In your client code, you can then pass the headers:

string time = AWSSDKUtils.GetFormattedTimestampRFC822(TemporaryAmazonTokenHandler.GetTimeCorrectionMinutes());
                            request.Headers[HeaderKeys.DateHeader] = time;
                            request.Headers[HeaderKeys.XAmzDateHeader] = time;

For the entire scheme to work, you need to write additional code which makes sure that these header values are actually applied to the web request as described below:

http://deepinsightsdotnet.blogspot.com/2014/12/is-there-anyway-to-programmatically.html

Comments

Popular posts from this blog

Enable Visual Studio to use more than 2GB of memory

Firefox and Chrome dark mode

Dealing with the morons who built Dell 7710 and RAID