예제 #1
0
        /// <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;
            }
        }
예제 #2
0
        /// <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;
            }
        }
예제 #3
0
        /// <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;
            }
        }
예제 #4
0
        /// <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 /&lt;account-name&gt;/&lt;container-name&gt;/&lt;blob-name&gt;.</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;
        }
예제 #5
0
 /// <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);
 }
예제 #6
0
 /// <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);
 }
예제 #7
0
 /// <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);
 }
예제 #8
0
 /// <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);
 }
예제 #9
0
        /// <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 /&lt;account-name&gt;/&lt;container-name&gt;/&lt;blob-name&gt;.</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);
        }
예제 #10
0
        /// <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;
            }
        }
예제 #11
0
        /// <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;
            }
        }