/// <summary> /// Creates the web request. /// </summary> /// <param name="uri">The request Uri.</param> /// <param name="timeout">The timeout.</param> /// <param name="builder">The builder.</param> /// <returns>A web request for performing the operation.</returns> internal static StorageRequestMessage CreateRequestMessage(HttpMethod method, Uri uri, int? timeout, UriQueryBuilder builder, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { if (builder == null) { builder = new UriQueryBuilder(); } if (timeout.HasValue && timeout.Value > 0) { builder.Add("timeout", timeout.ToString()); } #if WINDOWS_RT && !NETCORE // Windows Phone does not allow the caller to disable caching, so a random GUID // is added to every URI to make it look like a different request. builder.Add("randomguid", Guid.NewGuid().ToString("N")); #endif Uri uriRequest = builder.AddToUri(uri); StorageRequestMessage msg = new StorageRequestMessage(method, uriRequest, canonicalizer, credentials, credentials.AccountName); msg.Content = content; return msg; }
/// <summary> /// Creates the web request. /// </summary> /// <param name="method">The HTTP method.</param> /// <param name="uri">The request URI.</param> /// <param name="timeout">The timeout.</param> /// <param name="builder">An object of type <see cref="UriQueryBuilder"/>, containing additional parameters to add to the URI query string.</param> /// <param name="operationContext">An <see cref="OperationContext" /> object for tracking the current operation.</param> /// <returns> /// A web request for performing the operation. /// </returns> internal static HttpWebRequest CreateWebRequest(string method, Uri uri, int? timeout, UriQueryBuilder builder, OperationContext operationContext) { if (builder == null) { builder = new UriQueryBuilder(); } if (timeout != 0) { builder.Add("timeout", timeout.ToString()); } Uri uriRequest = builder.AddToUri(uri); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriRequest); request.Method = method; request.Headers.Add(Constants.HeaderConstants.StorageVersionHeader, Constants.HeaderConstants.TargetStorageVersion); request.UserAgent = Constants.HeaderConstants.UserAgent; request.KeepAlive = true; // Disable the Expect 100-Continue request.ServicePoint.Expect100Continue = false; return request; }
internal static HttpWebRequest BuildRequestForTableQuery(Uri uri, UriQueryBuilder builder, int? timeout, bool useVersionHeader, OperationContext ctx, TablePayloadFormat payloadFormat) { HttpWebRequest msg = BuildRequestCore(uri, builder, "GET", timeout, useVersionHeader, ctx); SetAcceptHeaderForHttpWebRequest(msg, payloadFormat); Logger.LogInformational(ctx, SR.PayloadFormat, payloadFormat); return msg; }
internal static HttpWebRequest BuildRequestCore(Uri uri, UriQueryBuilder builder, string method, int? timeout, bool useVersionHeader, OperationContext ctx) { HttpWebRequest msg = HttpWebRequestFactory.CreateWebRequest(method, uri, timeout, builder, useVersionHeader, ctx); msg.Headers.Add("Accept-Charset", "UTF-8"); msg.Headers.Add("MaxDataServiceVersion", "3.0;NetFx"); return msg; }
/// <summary> /// Constructs a web request to commit a block to an append blob. /// </summary> /// <param name="uri">A <see cref="System.Uri"/> specifying the absolute URI to the blob.</param> /// <param name="timeout">An integer specifying the server timeout interval.</param> /// <param name="accessCondition">An <see cref="AccessCondition"/> object that represents the condition that must be met in order for the request to proceed.</param> /// <param name="content"> The HTTP entity body and content headers.</param> /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param> /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns> public static HttpRequestMessage AppendBlock(Uri uri, int? timeout, AccessCondition accessCondition, HttpContent content, OperationContext operationContext) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.QueryConstants.Component, "appendblock"); HttpRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Put, uri, timeout, builder, content, operationContext); request.ApplyAccessCondition(accessCondition); request.ApplyAppendCondition(accessCondition); return request; }
/// <summary> /// Constructs a web request to return the ACL for a cloud resource. /// </summary> /// <param name="uri">The absolute URI to the resource.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="builder">An optional query builder to use.</param> /// <returns><returns>A web request to use to perform the operation.</returns></returns> internal static HttpRequestMessage GetAcl(Uri uri, int? timeout, UriQueryBuilder builder, HttpContent content, OperationContext operationContext) { if (builder == null) { builder = new UriQueryBuilder(); } builder.Add(Constants.QueryConstants.Component, "acl"); HttpRequestMessage request = CreateRequestMessage(HttpMethod.Get, uri, timeout, builder, content, operationContext); return request; }
internal static HttpWebRequest CreateWebRequest(string method, Uri uri, int? timeout, UriQueryBuilder builder, bool useVersionHeader, OperationContext operationContext) { if (builder == null) { builder = new UriQueryBuilder(); } if (timeout.HasValue && timeout.Value > 0) { builder.Add("timeout", timeout.Value.ToString(CultureInfo.InvariantCulture)); } #if WINDOWS_PHONE // Windows Phone does not allow the caller to disable caching, so a random GUID // is added to every URI to make it look a different request. builder.Add("randomguid", Guid.NewGuid().ToString("N")); #endif Uri uriRequest = builder.AddToUri(uri); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriRequest); request.Method = method; // Set the Content-Length of requests to 0 by default. If we do not upload // a body, signing requires it to be 0. On Windows Phone, all requests except // GET need this. On desktop, however, only PUT requests need it. #if !WINDOWS_PHONE if (method.Equals(WebRequestMethods.Http.Put, StringComparison.OrdinalIgnoreCase)) #else if (!method.Equals(WebRequestMethods.Http.Get, StringComparison.OrdinalIgnoreCase)) #endif { request.ContentLength = 0; } request.UserAgent = Constants.HeaderConstants.UserAgent; if (useVersionHeader) { request.Headers[Constants.HeaderConstants.StorageVersionHeader] = Constants.HeaderConstants.TargetStorageVersion; } #if !WINDOWS_PHONE request.KeepAlive = true; // Disable the Expect 100-Continue request.ServicePoint.Expect100Continue = false; #endif return request; }
internal static HttpRequestMessage BuildRequestCore(Uri uri, HttpMethod method, int? timeout, OperationContext ctx) { Uri uriRequest = uri; if (timeout != null && timeout != 0) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add("timeout", timeout.ToString()); uriRequest = builder.AddToUri(uri); } HttpRequestMessage msg = new HttpRequestMessage(method, uriRequest); msg.Headers.Add("Accept", "application/atom+xml,application/xml"); msg.Headers.Add("Accept-Charset", "UTF-8"); msg.Headers.Add("MaxDataServiceVersion", "2.0;NetFx"); return msg; }
/// <summary> /// Constructs a web request to return the ACL for a cloud resource. /// </summary> /// <param name="uri">The absolute URI to the resource.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="builder">An optional query builder to use.</param> /// <returns><returns>A web request to use to perform the operation.</returns></returns> internal static StorageRequestMessage GetAcl(Uri uri, int? timeout, UriQueryBuilder builder, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { if (builder == null) { builder = new UriQueryBuilder(); } builder.Add(Constants.QueryConstants.Component, "acl"); StorageRequestMessage request = CreateRequestMessage(HttpMethod.Get, uri, timeout, builder, content, operationContext, canonicalizer, credentials); #if WINDOWS_PHONE // Windows phone adds */* as the Accept type when we don't set one explicitly. request.Headers.Add(Constants.HeaderConstants.PayloadAcceptHeader, Constants.XMLAcceptHeaderValue); #endif return request; }
internal static Tuple<HttpWebRequest, Stream> BuildRequestForTableOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int? timeout, TableOperation operation, OperationContext ctx) { HttpWebRequest msg = BuildRequestCore(uri, builder, operation.HttpMethod, timeout, ctx); if (operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.Merge) { // post tunnelling msg.Headers.Add("X-HTTP-Method", "MERGE"); } // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge) { if (operation.Entity.ETag != null) { msg.Headers.Add("If-Match", operation.Entity.ETag); } } if (operation.OperationType == TableOperationType.Insert || operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.InsertOrReplace || operation.OperationType == TableOperationType.Replace) { // create the writer, indent for readability of the examples. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { CheckCharacters = false, // sets this flag on the XmlWriter for ATOM Version = ODataVersion.V2 // set the Odata version to use when writing the entry }; HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg, bufferManager); ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings); ODataWriter writer = odataWriter.CreateODataEntryWriter(); WriteOdataEntity(operation.Entity, operation.OperationType, ctx, writer); return new Tuple<HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream()); } return new Tuple<HttpWebRequest, Stream>(msg, null); }
/// <summary> /// Creates the web request. /// </summary> /// <param name="uri">The request Uri.</param> /// <param name="timeout">The timeout.</param> /// <param name="builder">The builder.</param> /// <returns>A web request for performing the operation.</returns> internal static HttpRequestMessage CreateRequestMessage(HttpMethod method, Uri uri, int? timeout, UriQueryBuilder builder, HttpContent content, OperationContext operationContext) { if (builder == null) { builder = new UriQueryBuilder(); } if (timeout.HasValue && timeout.Value > 0) { builder.Add("timeout", timeout.ToString()); } Uri uriRequest = builder.AddToUri(uri); HttpRequestMessage msg = new HttpRequestMessage(method, uriRequest); msg.Content = content; return msg; }
internal void ApplyToUriQueryBuilder(UriQueryBuilder builder) { if (!string.IsNullOrEmpty(this.NextPartitionKey)) { builder.Add(TableConstants.TableServiceNextPartitionKey, this.NextPartitionKey); } if (!string.IsNullOrEmpty(this.NextRowKey)) { builder.Add(TableConstants.TableServiceNextRowKey, this.NextRowKey); } if (!string.IsNullOrEmpty(this.NextTableName)) { builder.Add(TableConstants.TableServiceNextTableName, this.NextTableName); } }
internal static Tuple<HttpWebRequest, Stream> BuildRequestForTableBatchOperation(Uri uri, UriQueryBuilder builder, int? timeout, Uri baseUri, string tableName, TableBatchOperation batch, OperationContext ctx) { HttpWebRequest msg = BuildRequestCore(NavigationHelper.AppendPathToUri(uri, "$batch"), builder, "POST", timeout, ctx); // create the writer, indent for readability of the examples. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { CheckCharacters = false, // sets this flag on the XmlWriter for ATOM Version = ODataVersion.V2 // set the Odata version to use when writing the entry }; HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg); // Start Batch ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings); ODataBatchWriter batchWriter = odataWriter.CreateODataBatchWriter(); batchWriter.WriteStartBatch(); bool isQuery = batch.Count == 1 && batch[0].OperationType == TableOperationType.Retrieve; // Query operations should not be inside changeset in payload if (!isQuery) { // Start Operation batchWriter.WriteStartChangeset(); batchWriter.Flush(); } foreach (TableOperation operation in batch) { string httpMethod = operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge ? "MERGE" : operation.HttpMethod; ODataBatchOperationRequestMessage mimePartMsg = batchWriter.CreateOperationRequestMessage(httpMethod, operation.GenerateRequestURI(baseUri, tableName)); // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge) { mimePartMsg.SetHeader("If-Match", operation.Entity.ETag); } if (operation.OperationType != TableOperationType.Delete && operation.OperationType != TableOperationType.Retrieve) { using (ODataMessageWriter batchEntryWriter = new ODataMessageWriter(mimePartMsg, writerSettings)) { // Write entity ODataWriter entryWriter = batchEntryWriter.CreateODataEntryWriter(); WriteOdataEntity(operation.Entity, operation.OperationType, ctx, entryWriter); } } } if (!isQuery) { // End Operation batchWriter.WriteEndChangeset(); } // End Batch batchWriter.WriteEndBatch(); batchWriter.Flush(); return new Tuple<HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream()); }
internal static HttpWebRequest BuildRequestForTableQuery(Uri uri, UriQueryBuilder builder, int? timeout, OperationContext ctx) { HttpWebRequest msg = BuildRequestCore(uri, builder, "GET", timeout, ctx); return msg; }
/// <summary> /// Creates a web request to get Queue service stats. /// </summary> /// <param name="uri">A <see cref="System.Uri"/> specifying the Queue service endpoint.</param> /// <param name="builder">A <see cref="UriQueryBuilder"/> object specifying additional parameters to add to the URI query string.</param> /// <param name="timeout">The server timeout interval, in seconds.</param> /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param> /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns> public static HttpWebRequest GetServiceStats(Uri uri, UriQueryBuilder builder, int? timeout, OperationContext operationContext) { return QueueHttpWebRequestFactory.GetServiceStats(uri, builder, timeout, true /* useVersionHeader */, operationContext); }
/// <summary> /// Creates a web request to set the properties of the Queue service. /// </summary> /// <param name="uri">A <see cref="System.Uri"/> specifying the Queue service endpoint.</param> /// <param name="builder">A <see cref="UriQueryBuilder"/> object specifying additional parameters to add to the URI query string.</param> /// <param name="timeout">The server timeout interval, in seconds.</param> /// <param name="useVersionHeader">A flag indicating whether to set the x-ms-version HTTP header.</param> /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param> /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns> internal static HttpWebRequest SetServiceProperties(Uri uri, UriQueryBuilder builder, int? timeout, bool useVersionHeader, OperationContext operationContext) { return HttpWebRequestFactory.SetServiceProperties(uri, builder, timeout, useVersionHeader, operationContext); }
/// <summary> /// Constructs a web request to peek messages from a queue. /// </summary> /// <param name="uri">A <see cref="System.Uri"/> specifying the absolute URI to the queue.</param> /// <param name="timeout">An integer specifying the server timeout interval.</param> /// <param name="numberOfMessages">An integer specifying the number of messages to peek.</param> /// <param name="useVersionHeader">A flag indicating whether to set the x-ms-version HTTP header.</param> /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param> /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns> public static HttpWebRequest PeekMessages(Uri uri, int? timeout, int numberOfMessages, bool useVersionHeader, OperationContext operationContext) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.HeaderConstants.PeekOnly, Constants.HeaderConstants.TrueHeader); builder.Add(Constants.QueryConstants.NumOfMessages, numberOfMessages.ToString(CultureInfo.InvariantCulture)); HttpWebRequest request = HttpWebRequestFactory.CreateWebRequest(WebRequestMethods.Http.Get, uri, timeout, builder, useVersionHeader, operationContext); return request; }
/// <summary> /// Constructs a web request to get messages from a queue. /// </summary> /// <param name="uri">A <see cref="System.Uri"/> specifying the absolute URI to the queue.</param> /// <param name="timeout">An integer specifying the server timeout interval.</param> /// <param name="numberOfMessages">An integer specifying the number of messages to get.</param> /// <param name="visibilityTimeout">A <see cref="TimeSpan"/> value specifying the visibility timeout.</param> /// <param name="useVersionHeader">A flag indicating whether to set the x-ms-version HTTP header.</param> /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param> /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns> public static HttpWebRequest GetMessages(Uri uri, int? timeout, int numberOfMessages, TimeSpan? visibilityTimeout, bool useVersionHeader, OperationContext operationContext) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.QueryConstants.NumOfMessages, numberOfMessages.ToString(CultureInfo.InvariantCulture)); if (visibilityTimeout != null) { builder.Add(Constants.QueryConstants.VisibilityTimeout, visibilityTimeout.Value.RoundUpToSeconds().ToString(CultureInfo.InvariantCulture)); } HttpWebRequest request = HttpWebRequestFactory.CreateWebRequest(WebRequestMethods.Http.Get, uri, timeout, builder, useVersionHeader, operationContext); return request; }
/// <summary> /// Initializes a new instance of the <see cref="UriQueryBuilder"/> class that contains elements copied from the specified <see cref="UriQueryBuilder"/>. /// </summary> /// <param name="builder">The <see cref="UriQueryBuilder"/> whose elements are copied to the new <see cref="UriQueryBuilder"/>.</param> public UriQueryBuilder(UriQueryBuilder builder) { this.parameters = builder != null ? new Dictionary <string, string>(builder.parameters) : new Dictionary <string, string>(); }
/// <summary> /// Constructs a web request to return a listing of all containers in this storage account. /// </summary> /// <param name="uri">A <see cref="System.Uri"/> specifying the Blob service endpoint.</param> /// <param name="timeout">An integer specifying the server timeout interval.</param> /// <param name="listingContext">A <see cref="ListingContext"/> object.</param> /// <param name="detailsIncluded">A <see cref="ContainerListingDetails"/> enumeration value that indicates whether to return container metadata with the listing.</param> /// <param name="useVersionHeader">A boolean value indicating whether to set the <i>x-ms-version</i> HTTP header.</param> /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param> /// <returns>A web request for the specified operation.</returns> public static HttpWebRequest List(Uri uri, int? timeout, ListingContext listingContext, ContainerListingDetails detailsIncluded, bool useVersionHeader, OperationContext operationContext) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.QueryConstants.Component, "list"); if (listingContext != null) { if (listingContext.Prefix != null) { builder.Add("prefix", listingContext.Prefix); } if (listingContext.Marker != null) { builder.Add("marker", listingContext.Marker); } if (listingContext.MaxResults.HasValue) { builder.Add("maxresults", listingContext.MaxResults.ToString()); } } if ((detailsIncluded & ContainerListingDetails.Metadata) != 0) { builder.Add("include", "metadata"); } HttpWebRequest request = HttpWebRequestFactory.CreateWebRequest(WebRequestMethods.Http.Get, uri, timeout, builder, useVersionHeader, operationContext); return request; }
internal static Tuple<HttpWebRequest, Stream> BuildRequestForTableBatchOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int? timeout, string tableName, TableBatchOperation batch, bool useVersionHeader, OperationContext ctx, TableRequestOptions options, string accountName) { HttpWebRequest msg = BuildRequestCore(NavigationHelper.AppendPathToSingleUri(uri, "$batch"), builder, "POST", timeout, useVersionHeader, ctx); TablePayloadFormat payloadFormat = options.PayloadFormat.Value; Logger.LogInformational(ctx, SR.PayloadFormat, payloadFormat); // create the writer, indent for readability of the examples. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { CheckCharacters = false, // sets this flag on the XmlWriter for ATOM Version = TableConstants.ODataProtocolVersion // set the Odata version to use when writing the entry }; HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg, bufferManager); ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings); ODataBatchWriter batchWriter = odataWriter.CreateODataBatchWriter(); batchWriter.WriteStartBatch(); bool isQuery = batch.Count == 1 && batch[0].OperationType == TableOperationType.Retrieve; // Query operations should not be inside changeset in payload if (!isQuery) { // Start Operation batchWriter.WriteStartChangeset(); batchWriter.Flush(); } foreach (TableOperation operation in batch) { string httpMethod = operation.HttpMethod; if (operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge) { options.AssertNoEncryptionPolicyOrStrictMode(); httpMethod = "MERGE"; } ODataBatchOperationRequestMessage mimePartMsg = batchWriter.CreateOperationRequestMessage(httpMethod, operation.GenerateRequestURI(uri, tableName)); SetAcceptAndContentTypeForODataBatchMessage(mimePartMsg, payloadFormat); // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge) { mimePartMsg.SetHeader("If-Match", operation.Entity.ETag); } // Prefer header if (operation.OperationType == TableOperationType.Insert) { mimePartMsg.SetHeader("Prefer", operation.EchoContent ? "return-content" : "return-no-content"); } if (operation.OperationType != TableOperationType.Delete && operation.OperationType != TableOperationType.Retrieve) { using (ODataMessageWriter batchEntryWriter = new ODataMessageWriter(mimePartMsg, writerSettings, new TableStorageModel(accountName))) { // Write entity ODataWriter entryWriter = batchEntryWriter.CreateODataEntryWriter(); WriteOdataEntity(operation.Entity, operation.OperationType, ctx, entryWriter, options); } } } if (!isQuery) { // End Operation batchWriter.WriteEndChangeset(); } // End Batch batchWriter.WriteEndBatch(); batchWriter.Flush(); return new Tuple<HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream()); }
internal UriQueryBuilder GenerateQueryBuilder() { UriQueryBuilder builder = new UriQueryBuilder(); // filter if (!string.IsNullOrEmpty(this.FilterString)) { builder.Add(TableConstants.Filter, this.FilterString); } // take if (this.takeCount.HasValue) { builder.Add(TableConstants.Top, Convert.ToString(Math.Min(this.takeCount.Value, TableConstants.TableServiceMaxResults))); } // select if (this.SelectColumns != null && this.SelectColumns.Count > 0) { StringBuilder colBuilder = new StringBuilder(); bool foundRk = false; bool foundPk = false; bool foundTs = false; for (int m = 0; m < this.SelectColumns.Count; m++) { if (this.SelectColumns[m] == TableConstants.PartitionKey) { foundPk = true; } else if (this.SelectColumns[m] == TableConstants.RowKey) { foundRk = true; } else if (this.SelectColumns[m] == TableConstants.Timestamp) { foundTs = true; } colBuilder.Append(this.SelectColumns[m]); if (m < this.SelectColumns.Count - 1) { colBuilder.Append(","); } } if (!foundPk) { colBuilder.Append(","); colBuilder.Append(TableConstants.PartitionKey); } if (!foundRk) { colBuilder.Append(","); colBuilder.Append(TableConstants.RowKey); } if (!foundTs) { colBuilder.Append(","); colBuilder.Append(TableConstants.Timestamp); } builder.Add(TableConstants.Select, colBuilder.ToString()); } return builder; }
/// <summary> /// Creates the specified Uri. /// </summary> /// <param name="uri">The Uri to create.</param> /// <param name="timeout">The timeout.</param> /// <param name="builder">The builder.</param> /// <returns>A web request for performing the operation.</returns> internal static StorageRequestMessage Create(Uri uri, int? timeout, UriQueryBuilder builder, HttpContent content, OperationContext operationContext, ICanonicalizer canonicalizer, StorageCredentials credentials) { StorageRequestMessage request = CreateRequestMessage(HttpMethod.Put, uri, timeout, builder, content, operationContext, canonicalizer, credentials); return request; }
/// <summary> /// Generates a query builder for building service requests. /// </summary> /// <returns>A <see cref="UriQueryBuilder"/> for building service requests.</returns> internal static UriQueryBuilder GetServiceUriQueryBuilder() { UriQueryBuilder uriBuilder = new UriQueryBuilder(); uriBuilder.Add(Constants.QueryConstants.ResourceType, "service"); return uriBuilder; }
/// <summary> /// Constructs a web request to return a listing of all containers in this storage account. /// </summary> /// <param name="uri">The absolute URI for the account.</param> /// <param name="timeout">The server timeout interval.</param> /// <param name="listingContext">A set of parameters for the listing operation.</param> /// <param name="detailsIncluded">Additional details to return with the listing.</param> /// <returns>A web request for the specified operation.</returns> public static HttpRequestMessage List(Uri uri, int? timeout, ListingContext listingContext, ContainerListingDetails detailsIncluded, HttpContent content, OperationContext operationContext) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.QueryConstants.Component, "list"); if (listingContext != null) { if (listingContext.Prefix != null) { builder.Add("prefix", listingContext.Prefix); } if (listingContext.Marker != null) { builder.Add("marker", listingContext.Marker); } if (listingContext.MaxResults != null) { builder.Add("maxresults", listingContext.MaxResults.ToString()); } } if ((detailsIncluded & ContainerListingDetails.Metadata) != 0) { builder.Add("include", "metadata"); } HttpRequestMessage request = HttpRequestMessageFactory.CreateRequestMessage(HttpMethod.Get, uri, timeout, builder, content, operationContext); return request; }
/// <summary> /// Initializes a new instance of the <see cref="UriQueryBuilder"/> class that contains elements copied from the specified <see cref="UriQueryBuilder"/>. /// </summary> /// <param name="builder">The <see cref="UriQueryBuilder"/> whose elements are copied to the new <see cref="UriQueryBuilder"/>.</param> public UriQueryBuilder(UriQueryBuilder builder) { this.parameters = builder != null ? new Dictionary<string, string>(builder.parameters) : new Dictionary<string, string>(); }
/// <summary> /// Constructs a web request to add a message for a queue. /// </summary> /// <param name="uri">A <see cref="System.Uri"/> specifying the absolute URI to the queue.</param> /// <param name="timeout">An integer specifying the server timeout interval.</param> /// <param name="timeToLiveInSeconds">The message time-to-live, in seconds.</param> /// <param name="visibilityTimeoutInSeconds">The length of time during which the message will be invisible, in seconds.</param> /// <param name="useVersionHeader">A flag indicating whether to set the x-ms-version HTTP header.</param> /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param> /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns> public static HttpWebRequest AddMessage(Uri uri, int? timeout, int? timeToLiveInSeconds, int? visibilityTimeoutInSeconds, bool useVersionHeader, OperationContext operationContext) { UriQueryBuilder builder = new UriQueryBuilder(); if (timeToLiveInSeconds != null) { builder.Add(Constants.QueryConstants.MessageTimeToLive, timeToLiveInSeconds.Value.ToString(CultureInfo.InvariantCulture)); } if (visibilityTimeoutInSeconds != null) { builder.Add(Constants.QueryConstants.VisibilityTimeout, visibilityTimeoutInSeconds.Value.ToString(CultureInfo.InvariantCulture)); } HttpWebRequest request = HttpWebRequestFactory.CreateWebRequest(WebRequestMethods.Http.Post, uri, timeout, builder, useVersionHeader, operationContext); return request; }
/// <summary> /// Constructs a web request to update a message. /// </summary> /// <param name="uri">A <see cref="System.Uri"/> specifying the absolute URI to the message to update.</param> /// <param name="timeout">The server timeout interval, in seconds.</param> /// <param name="popReceipt">A string specifying the pop receipt of the message.</param> /// <param name="visibilityTimeoutInSeconds">The length of time during which the message will be invisible, in seconds.</param> /// <param name="useVersionHeader">A flag indicating whether to set the x-ms-version HTTP header.</param> /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param> /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns> public static HttpWebRequest UpdateMessage(Uri uri, int? timeout, string popReceipt, int visibilityTimeoutInSeconds, bool useVersionHeader, OperationContext operationContext) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.QueryConstants.PopReceipt, popReceipt); builder.Add(Constants.QueryConstants.VisibilityTimeout, visibilityTimeoutInSeconds.ToString(CultureInfo.InvariantCulture)); HttpWebRequest request = HttpWebRequestFactory.CreateWebRequest(WebRequestMethods.Http.Put, uri, timeout, builder, useVersionHeader, operationContext); return request; }
internal static Tuple<HttpWebRequest, Stream> BuildRequestForTableOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int? timeout, TableOperation operation, bool useVersionHeader, OperationContext ctx, TableRequestOptions options, string accountName) { HttpWebRequest msg = BuildRequestCore(uri, builder, operation.HttpMethod, timeout, useVersionHeader, ctx); TablePayloadFormat payloadFormat = options.PayloadFormat.Value; // Set Accept and Content-Type based on the payload format. SetAcceptHeaderForHttpWebRequest(msg, payloadFormat); Logger.LogInformational(ctx, SR.PayloadFormat, payloadFormat); if (operation.HttpMethod != "HEAD" && operation.HttpMethod != "GET") { SetContentTypeForHttpWebRequest(msg, payloadFormat); } if (operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.Merge) { options.AssertNoEncryptionPolicyOrStrictMode(); // post tunnelling msg.Headers.Add("X-HTTP-Method", "MERGE"); } // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge) { if (operation.Entity.ETag != null) { msg.Headers.Add("If-Match", operation.Entity.ETag); } } // prefer header if (operation.OperationType == TableOperationType.Insert) { msg.Headers.Add("Prefer", operation.EchoContent ? "return-content" : "return-no-content"); } if (operation.OperationType == TableOperationType.Insert || operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.InsertOrReplace || operation.OperationType == TableOperationType.Replace) { // create the writer, indent for readability of the examples. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { CheckCharacters = false, // sets this flag on the XmlWriter for ATOM Version = TableConstants.ODataProtocolVersion // set the Odata version to use when writing the entry }; HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg, bufferManager); if (operation.HttpMethod != "HEAD" && operation.HttpMethod != "GET") { SetContentTypeForAdapterMessage(adapterMsg, payloadFormat); } ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings, new TableStorageModel(accountName)); ODataWriter writer = odataWriter.CreateODataEntryWriter(); WriteOdataEntity(operation.Entity, operation.OperationType, ctx, writer, options); return new Tuple<HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream()); } return new Tuple<HttpWebRequest, Stream>(msg, null); }
/// <summary> /// Constructs a web request to update a message. /// </summary> /// <param name="uri">A <see cref="System.Uri"/> specifying the absolute URI to the message to update.</param> /// <param name="timeout">The server timeout interval, in seconds.</param> /// <param name="popReceipt">A string specifying the pop receipt of the message.</param> /// <param name="useVersionHeader">A flag indicating whether to set the x-ms-version HTTP header.</param> /// <param name="operationContext">An <see cref="OperationContext"/> object that represents the context for the current operation.</param> /// <returns>A <see cref="System.Net.HttpWebRequest"/> object.</returns> public static HttpWebRequest DeleteMessage(Uri uri, int? timeout, string popReceipt, bool useVersionHeader, OperationContext operationContext) { UriQueryBuilder builder = new UriQueryBuilder(); builder.Add(Constants.QueryConstants.PopReceipt, popReceipt); HttpWebRequest request = HttpWebRequestFactory.Delete(uri, builder, timeout, useVersionHeader, operationContext); return request; }
/// <summary> /// Gets the container Uri query builder. /// </summary> /// <returns>A <see cref="UriQueryBuilder"/> for the container.</returns> internal static UriQueryBuilder GetContainerUriQueryBuilder() { UriQueryBuilder uriBuilder = new UriQueryBuilder(); uriBuilder.Add(Constants.QueryConstants.ResourceType, "container"); return uriBuilder; }
public UriQueryBuilder(UriQueryBuilder builder) { throw new System.NotImplementedException(); }