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
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
Post a Comment