I\'m building this class to download files in parts/sections/segments. In .NET 4.0, I can use this code to specify the range to download from
long startPos =
This is the code by Mutant_Fruit copied from WebRequest.AddRange - what about files > 2gb? showing how to to add a range specifier longer than 2GB to an HttpWebRequest.
MethodInfo method = typeof(WebHeaderCollection).GetMethod
("AddWithoutValidate", BindingFlags.Instance | BindingFlags.NonPublic);
HttpWebRequest request = (HttpWebRequest) WebRequest.Create ("http://www.example.com/file.exe");
long start = int32.MaxValue;
long end = int32.MaxValue + 100000;
string key = "Range";
string val = string.Format ("bytes={0}-{1}", start, end);
method.Invoke (request.Headers, new object[] { key, val });
I wrote this extension method for it.
#region HttpWebRequest.AddRange(long)
static MethodInfo httpWebRequestAddRangeHelper = typeof(WebHeaderCollection).GetMethod
("AddWithoutValidate", BindingFlags.Instance | BindingFlags.NonPublic);
///
/// Adds a byte range header to a request for a specific range from the beginning or end of the requested data.
///
/// The to add the range specifier to.
/// The starting or ending point of the range.
public static void AddRange(this HttpWebRequest request, long start) { request.AddRange(start, -1L); }
/// Adds a byte range header to the request for a specified range.
/// The to add the range specifier to.
/// The position at which to start sending data.
/// The position at which to stop sending data.
public static void AddRange(this HttpWebRequest request, long start, long end)
{
if (request == null) throw new ArgumentNullException("request");
if (start < 0) throw new ArgumentOutOfRangeException("start", "Starting byte cannot be less than 0.");
if (end < start) end = -1;
string key = "Range";
string val = string.Format("bytes={0}-{1}", start, end == -1 ? "" : end.ToString());
httpWebRequestAddRangeHelper.Invoke(request.Headers, new object[] { key, val });
}
#endregion
The extension methods above need the following using directives
using System.Reflection;
using System.Net;
And there is no need to use this this extension method in .NET 4 because there are two overloads of the AddRange method that accept int64 (long) as parameters.