/// <summary> /// Adds the conditional. /// </summary> /// <param name="request"> The request. </param> /// <param name="header"> The header. </param> /// <param name="etag"> The resource ETag. </param> internal static void AddConditional(HttpWebRequest request, ConditionHeaderKind header, string etag) { if (header == ConditionHeaderKind.IfModifiedSince || header == ConditionHeaderKind.IfUnmodifiedSince) { throw new InvalidOperationException(SR.ConditionalRequiresDateTime); } switch (header) { case ConditionHeaderKind.IfMatch: request.Headers[HttpRequestHeader.IfMatch] = etag; break; case ConditionHeaderKind.IfNoneMatch: request.Headers[HttpRequestHeader.IfNoneMatch] = etag; break; } }
/// <summary> /// Adds the conditional. /// </summary> /// <param name="request">The request.</param> /// <param name="header">The header.</param> /// <param name="dateTime">The date time.</param> internal static void AddConditional(HttpWebRequest request, ConditionHeaderKind header, DateTime dateTime) { if (header == ConditionHeaderKind.IfMatch || header == ConditionHeaderKind.IfNoneMatch) { throw new InvalidOperationException(SR.ConditionalRequiresETag); } switch (header) { case ConditionHeaderKind.IfModifiedSince: request.Headers[HttpRequestHeader.IfModifiedSince] = dateTime.ToString("R", CultureInfo.InvariantCulture); break; case ConditionHeaderKind.IfUnmodifiedSince: request.Headers[HttpRequestHeader.IfUnmodifiedSince] = dateTime.ToString("R", CultureInfo.InvariantCulture); break; } }
/// <summary> /// Adds the conditional. /// </summary> /// <param name="request">The request.</param> /// <param name="header">The header.</param> /// <param name="etag">The resource ETag.</param> internal static void AddConditional(HttpWebRequest request, ConditionHeaderKind header, string etag) { if (header == ConditionHeaderKind.IfModifiedSince || header == ConditionHeaderKind.IfUnmodifiedSince) { throw new InvalidOperationException(SR.ConditionalRequiresDateTime); } switch (header) { case ConditionHeaderKind.IfMatch: request.Headers[HttpRequestHeader.IfMatch] = etag; break; case ConditionHeaderKind.IfNoneMatch: request.Headers[HttpRequestHeader.IfNoneMatch] = etag; break; } }
/// <summary> /// Constructs a web request to copy a blob. /// </summary> /// <param name="uri">The absolute URI to the destination blob.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="source">The canonical path to the source blob, in the form /<account-name>/<container-name>/<blob-name>.</param> /// <param name="sourceSnapshot">The snapshot version, if the source blob is a snapshot.</param> /// <param name="sourceConditions">A type of condition to check on the source blob.</param> /// <param name="sourceConditionsValue">The value of the condition to check on the source blob.</param> /// <param name="leaseId">The lease ID for the source blob, if it has an active lease.</param> /// <returns>A web request to use to perform the operation.</returns> public static HttpWebRequest CopyFrom(Uri uri, int timeout, string source, DateTime? sourceSnapshot, ConditionHeaderKind sourceConditions, string sourceConditionsValue, string leaseId) { if (sourceSnapshot != null) { // User needs to construct the proper canonical path string. source += "?snapshot=" + Request.ConvertDateTimeToSnapshotString(sourceSnapshot.Value.ToUniversalTime()); } HttpWebRequest request = CreateWebRequest(uri, timeout, null); request.ContentLength = 0; request.Method = "PUT"; request.Headers.Add(Constants.HeaderConstants.CopySourceHeader, source); switch (sourceConditions) { case ConditionHeaderKind.IfMatch: request.Headers.Add(Constants.HeaderConstants.SourceIfMatchHeader, sourceConditionsValue); break; case ConditionHeaderKind.IfModifiedSince: request.Headers.Add(Constants.HeaderConstants.SourceIfModifiedSinceHeader, sourceConditionsValue); break; case ConditionHeaderKind.IfNoneMatch: request.Headers.Add(Constants.HeaderConstants.SourceIfNoneMatchHeader, sourceConditionsValue); break; case ConditionHeaderKind.IfUnmodifiedSince: request.Headers.Add(Constants.HeaderConstants.SourceIfUnmodifiedSinceHeader, sourceConditionsValue); break; case ConditionHeaderKind.None: break; } Request.AddLeaseId(request, leaseId); return request; }
/// <summary> /// Adds a conditional header to the request. /// </summary> /// <param name="request">The web request.</param> /// <param name="header">The type of conditional header to add.</param> /// <param name="dateTime">The date and time specification for the request.</param> public static void AddConditional(HttpWebRequest request, ConditionHeaderKind header, DateTime dateTime) { Request.AddConditional(request, header, dateTime); }
/// <summary> /// Adds a conditional header to the request. /// </summary> /// <param name="request">The web request.</param> /// <param name="header">The type of conditional header to add.</param> /// <param name="etag">The blob's ETag.</param> public static void AddConditional(HttpWebRequest request, ConditionHeaderKind header, string etag) { Request.AddConditional(request, header, etag); }
/// <summary> /// Adds a conditional header to the request. /// </summary> /// <param name="request">The web request.</param> /// <param name="header">The type of conditional header to add.</param> /// <param name="dateTime">The date and time specification for the request.</param> public static void AddConditional(HttpWebRequest request, ConditionHeaderKind header, DateTime dateTime) { Request.AddConditional(request, header, dateTime); }
/// <summary> /// Adds a conditional header to the request. /// </summary> /// <param name="request">The web request.</param> /// <param name="header">The type of conditional header to add.</param> /// <param name="etag">The container's ETag.</param> public static void AddConditional(HttpWebRequest request, ConditionHeaderKind header, string etag) { Request.AddConditional(request, header, etag); }
/// <summary> /// Constructs a web request to copy a blob. /// </summary> /// <param name="uri">The absolute URI to the destination blob.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="source">The canonical path to the source blob, in the form /<account-name>/<container-name>/<blob-name>.</param> /// <param name="sourceSnapshot">The snapshot version, if the source blob is a snapshot.</param> /// <param name="sourceConditions">A type of condition to check on the source blob.</param> /// <param name="sourceConditionsValue">The value of the condition to check on the source blob.</param> /// <param name="leaseId">The lease ID for the source blob, if it has an active lease.</param> /// <returns>A web request to use to perform the operation.</returns> public static HttpWebRequest CopyFrom(Uri uri, int timeout, string source, DateTime?sourceSnapshot, ConditionHeaderKind sourceConditions, string sourceConditionsValue, string leaseId) { if (sourceSnapshot != null) { // User needs to construct the proper canonical path string. source += "?snapshot=" + Request.ConvertDateTimeToSnapshotString(sourceSnapshot.Value.ToUniversalTime()); } HttpWebRequest request = CreateWebRequest(uri, timeout, null); request.ContentLength = 0; request.Method = "PUT"; request.Headers.Add(Constants.HeaderConstants.CopySourceHeader, source); switch (sourceConditions) { case ConditionHeaderKind.IfMatch: request.Headers.Add(Constants.HeaderConstants.SourceIfMatchHeader, sourceConditionsValue); break; case ConditionHeaderKind.IfModifiedSince: request.Headers.Add(Constants.HeaderConstants.SourceIfModifiedSinceHeader, sourceConditionsValue); break; case ConditionHeaderKind.IfNoneMatch: request.Headers.Add(Constants.HeaderConstants.SourceIfNoneMatchHeader, sourceConditionsValue); break; case ConditionHeaderKind.IfUnmodifiedSince: request.Headers.Add(Constants.HeaderConstants.SourceIfUnmodifiedSinceHeader, sourceConditionsValue); break; case ConditionHeaderKind.None: break; } Request.AddLeaseId(request, leaseId); return(request); }
/// <summary> /// Adds the conditional. /// </summary> /// <param name="request"> The request. </param> /// <param name="header"> The header. </param> /// <param name="dateTime"> The date time. </param> internal static void AddConditional(HttpWebRequest request, ConditionHeaderKind header, DateTime dateTime) { if (header == ConditionHeaderKind.IfMatch || header == ConditionHeaderKind.IfNoneMatch) { throw new InvalidOperationException(SR.ConditionalRequiresETag); } switch (header) { case ConditionHeaderKind.IfModifiedSince: request.Headers[HttpRequestHeader.IfModifiedSince] = dateTime.ToString( "R", CultureInfo.InvariantCulture); break; case ConditionHeaderKind.IfUnmodifiedSince: request.Headers[HttpRequestHeader.IfUnmodifiedSince] = dateTime.ToString( "R", CultureInfo.InvariantCulture); break; } }
/// <summary>Converts AccessCondition into a <see cref="ConditionHeaderKind"/> type for use as a source conditional to Copy.</summary> /// <param name="condition">The original condition. </param> /// <param name="header">The resulting header for the condition. </param> /// <param name="value">The value for the condition. </param> internal static void GetSourceConditions( AccessCondition condition, out ConditionHeaderKind header, out string value) { header = ConditionHeaderKind.None; value = null; if (condition.AccessConditionHeader != null) { switch (condition.AccessConditionHeader.GetValueOrDefault()) { case HttpRequestHeader.IfMatch: header = ConditionHeaderKind.IfMatch; break; case HttpRequestHeader.IfNoneMatch: header = ConditionHeaderKind.IfNoneMatch; break; case HttpRequestHeader.IfModifiedSince: header = ConditionHeaderKind.IfModifiedSince; break; case HttpRequestHeader.IfUnmodifiedSince: header = ConditionHeaderKind.IfUnmodifiedSince; break; default: CommonUtils.ArgumentOutOfRange("condition", condition); break; } value = condition.AccessConditionValue; } }