本文整理汇总了C#中RESTCommand类的典型用法代码示例。如果您正苦于以下问题:C# RESTCommand类的具体用法?C# RESTCommand怎么用?C# RESTCommand使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
RESTCommand类属于命名空间,在下文中一共展示了RESTCommand类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: StreamWriteAsyncTest
public async Task StreamWriteAsyncTest()
{
byte[] buffer = GetRandomBuffer(1 * 1024 * 1024);
MemoryStream stream1 = new MemoryStream(buffer);
MemoryStream stream2 = new MemoryStream();
OperationContext tempOperationContext = new OperationContext();
RESTCommand<NullType> cmd = new RESTCommand<NullType>(TestBase.StorageCredentials, null);
ExecutionState<NullType> tempExecutionState = new ExecutionState<NullType>(cmd, null, tempOperationContext);
// Test basic write
await stream1.WriteToAsync(stream2, null, null, false, tempExecutionState, null, CancellationToken.None);
stream1.Position = 0;
TestHelper.AssertStreamsAreEqual(stream1, stream2);
stream2.Dispose();
stream2 = new MemoryStream();
await TestHelper.ExpectedExceptionAsync<ArgumentException>(
async () => await stream1.WriteToAsync(stream2, 1024, 1024, false, tempExecutionState, null, CancellationToken.None),
"Parameters copyLength and maxLength cannot be passed simultaneously.");
stream1.Dispose();
stream2.Dispose();
}
示例2: QueryImpl
private static RESTCommand<TableQuerySegment> QueryImpl(TableQuery query, TableContinuationToken token, CloudTableClient client, string tableName, TableRequestOptions requestOptions)
{
UriQueryBuilder builder = query.GenerateQueryBuilder();
if (token != null)
{
token.ApplyToUriQueryBuilder(builder);
}
StorageUri tempUriList = NavigationHelper.AppendPathToUri(client.StorageUri, tableName);
RESTCommand<TableQuerySegment> queryCmd = new RESTCommand<TableQuerySegment>(client.Credentials, tempUriList);
requestOptions.ApplyToStorageCommand(queryCmd);
queryCmd.CommandLocationMode = CommonUtility.GetListingLocationMode(token);
queryCmd.RetrieveResponseStream = true;
queryCmd.Handler = client.AuthenticationHandler;
queryCmd.BuildClient = HttpClientFactory.BuildHttpClient;
queryCmd.Builder = builder;
queryCmd.BuildRequest = (cmd, uri, queryBuilder, cnt, serverTimeout, ctx) => TableOperationHttpRequestMessageFactory.BuildRequestForTableQuery(uri, builder, serverTimeout, cnt, ctx);
queryCmd.PreProcessResponse = (cmd, resp, ex, ctx) => HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.OK, resp.StatusCode, null /* retVal */, cmd, ex);
queryCmd.PostProcessResponse = async (cmd, resp, ctx) =>
{
TableQuerySegment resSeg = await TableOperationHttpResponseParsers.TableQueryPostProcess(cmd.ResponseStream, resp, ctx);
if (resSeg.ContinuationToken != null)
{
resSeg.ContinuationToken.TargetLocation = cmd.CurrentResult.TargetLocation;
}
return resSeg;
};
return queryCmd;
}
示例3: StreamWriteSyncTestCopyLengthBoundary
public void StreamWriteSyncTestCopyLengthBoundary()
{
byte[] buffer = GetRandomBuffer(1 * 1024 * 1024);
MemoryStream stream1 = new MemoryStream(buffer);
MemoryStream stream2 = new MemoryStream();
MemoryStream stream3 = new MemoryStream();
OperationContext tempOperationContext = new OperationContext();
RESTCommand<NullType> cmd = new RESTCommand<NullType>(TestBase.StorageCredentials, null);
ExecutionState<NullType> tempExecutionState = new ExecutionState<NullType>(cmd, null, tempOperationContext);
// Test write with exact number of bytes
stream1.WriteToSync(stream2, stream1.Length, null, true, false, tempExecutionState, null);
stream1.Position = 0;
stream1.WriteToSync(stream3, stream1.Length, null, true, true, tempExecutionState, null);
stream1.Position = 0;
TestHelper.AssertStreamsAreEqual(stream1, stream2);
TestHelper.AssertStreamsAreEqual(stream1, stream3);
stream2.Dispose();
stream2 = new MemoryStream();
stream3.Dispose();
stream3 = new MemoryStream();
// Test write with one less byte
stream1.WriteToSync(stream2, stream1.Length - 1, null, true, false, tempExecutionState, null);
stream1.Position = 0;
stream1.WriteToSync(stream3, stream1.Length - 1, null, true, true, tempExecutionState, null);
stream1.Position = 0;
Assert.AreEqual(stream1.Length - 1, stream2.Length);
Assert.AreEqual(stream1.Length - 1, stream3.Length);
TestHelper.AssertStreamsAreEqualAtIndex(stream1, stream2, 0, 0, (int)stream1.Length - 1);
TestHelper.AssertStreamsAreEqualAtIndex(stream1, stream3, 0, 0, (int)stream1.Length - 1);
stream2.Dispose();
stream2 = new MemoryStream();
stream3.Dispose();
stream3 = new MemoryStream();
// Test with copyLength greater than length
TestHelper.ExpectedException<ArgumentOutOfRangeException>(
() => stream1.WriteToSync(stream2, stream1.Length + 1, null, true, false, tempExecutionState, null),
"The given stream does not contain the requested number of bytes from its given position.");
stream1.Position = 0;
TestHelper.ExpectedException<ArgumentOutOfRangeException>(
() => stream1.WriteToSync(stream3, stream1.Length + 1, null, true, true, tempExecutionState, null),
"The given stream does not contain the requested number of bytes from its given position.");
stream1.Position = 0;
stream1.Dispose();
stream2.Dispose();
stream3.Dispose();
}
示例4: WriteToMultiBufferMemoryStreamTestAsync
public async Task WriteToMultiBufferMemoryStreamTestAsync()
{
OperationContext tempOperationContext = new OperationContext();
RESTCommand<NullType> cmd = new RESTCommand<NullType>(TestBase.StorageCredentials, null);
ExecutionState<NullType> tempExecutionState = new ExecutionState<NullType>(cmd, null, tempOperationContext);
byte[] buffer = GetRandomBuffer(1 * 1024 * 1024);
MemoryStream stream1 = new MemoryStream(buffer);
MultiBufferMemoryStream stream2 = new MultiBufferMemoryStream(null /* bufferManager */);
await stream1.WriteToAsync(stream2, null, null, false, tempExecutionState, null, CancellationToken.None);
stream1.Seek(0, SeekOrigin.Begin);
stream2.Seek(0, SeekOrigin.Begin);
TestHelper.AssertStreamsAreEqual(stream1, stream2);
MultiBufferMemoryStream stream3 = new MultiBufferMemoryStream(null /* bufferManager */);
await TestHelper.ExpectedExceptionAsync<TimeoutException>(
() => stream2.FastCopyToAsync(stream3, DateTime.Now.AddMinutes(-1)),
"Past expiration time should immediately fail");
stream2.Seek(0, SeekOrigin.Begin);
stream3.Seek(0, SeekOrigin.Begin);
await stream2.FastCopyToAsync(stream3, DateTime.Now.AddHours(1));
stream2.Seek(0, SeekOrigin.Begin);
stream3.Seek(0, SeekOrigin.Begin);
TestHelper.AssertStreamsAreEqual(stream2, stream3);
MultiBufferMemoryStream stream4 = new MultiBufferMemoryStream(null /* bufferManager */, 12345);
await stream3.FastCopyToAsync(stream4, null);
stream3.Seek(0, SeekOrigin.Begin);
stream4.Seek(0, SeekOrigin.Begin);
TestHelper.AssertStreamsAreEqual(stream3, stream4);
MemoryStream stream5 = new MemoryStream();
await stream4.WriteToAsync(stream5, null, null, false, tempExecutionState, null, CancellationToken.None);
stream4.Seek(0, SeekOrigin.Begin);
stream5.Seek(0, SeekOrigin.Begin);
TestHelper.AssertStreamsAreEqual(stream4, stream5);
TestHelper.AssertStreamsAreEqual(stream1, stream5);
}
示例5: SetServicePropertiesImpl
private RESTCommand<NullType> SetServicePropertiesImpl(ServiceProperties properties, TableRequestOptions requestOptions)
{
MultiBufferMemoryStream memoryStream = new MultiBufferMemoryStream(null /* bufferManager */, (int)(1 * Constants.KB));
try
{
properties.WriteServiceProperties(memoryStream);
}
catch (InvalidOperationException invalidOpException)
{
throw new ArgumentException(invalidOpException.Message, "properties");
}
RESTCommand<NullType> retCmd = new RESTCommand<NullType>(this.Credentials, this.StorageUri);
requestOptions.ApplyToStorageCommand(retCmd);
retCmd.BuildRequest = (cmd, uri, builder, cnt, serverTimeout, ctx) => TableHttpRequestMessageFactory.SetServiceProperties(uri, serverTimeout, cnt, ctx);
retCmd.BuildContent = (cmd, ctx) => HttpContentFactory.BuildContentFromStream(memoryStream, 0, memoryStream.Length, null /* md5 */, cmd, ctx);
retCmd.Handler = this.AuthenticationHandler;
retCmd.BuildClient = HttpClientFactory.BuildHttpClient;
retCmd.PreProcessResponse =
(cmd, resp, ex, ctx) =>
HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.Accepted, resp, null /* retVal */, cmd, ex);
requestOptions.ApplyToStorageCommand(retCmd);
return retCmd;
}
示例6: GetServicePropertiesImpl
private RESTCommand<ServiceProperties> GetServicePropertiesImpl(BlobRequestOptions requestOptions)
{
RESTCommand<ServiceProperties> retCmd = new RESTCommand<ServiceProperties>(this.Credentials, this.BaseUri);
retCmd.BuildRequestDelegate = BlobHttpWebRequestFactory.GetServiceProperties;
retCmd.SignRequest = this.AuthenticationHandler.SignRequest;
retCmd.RetrieveResponseStream = true;
retCmd.PreProcessResponse =
(cmd, resp, ex, ctx) =>
HttpResponseParsers.ProcessExpectedStatusCodeNoException(
System.Net.HttpStatusCode.OK,
resp,
null /* retVal */,
cmd,
ex,
ctx);
retCmd.PostProcessResponse =
(cmd, resp, ex, ctx) => BlobHttpResponseParsers.ReadServiceProperties(cmd.ResponseStream);
retCmd.ApplyRequestOptions(requestOptions);
return retCmd;
}
示例7: ListContainersImpl
/// <summary>
/// Core implementation for the ListContainers method.
/// </summary>
/// <param name="prefix">The container prefix.</param>
/// <param name="detailsIncluded">The details included.</param>
/// <param name="currentToken">The continuation token.</param>
/// <param name="maxResults">A non-negative integer value that indicates the maximum number of results to be returned
/// in the result segment, up to the per-operation limit of 5000. If this value is null, the maximum possible number of results will be returned, up to 5000.</param>
/// <param name="options">A <see cref="BlobRequestOptions"/> object that specifies any additional options for the request.</param>
/// <returns>A <see cref="ResultSegment{T}"/> that lists the containers.</returns>
private RESTCommand<ResultSegment<CloudBlobContainer>> ListContainersImpl(string prefix, ContainerListingDetails detailsIncluded, BlobContinuationToken currentToken, int? maxResults, BlobRequestOptions options)
{
ListingContext listingContext = new ListingContext(prefix, maxResults)
{
Marker = currentToken != null ? currentToken.NextMarker : null
};
RESTCommand<ResultSegment<CloudBlobContainer>> getCmd = new RESTCommand<ResultSegment<CloudBlobContainer>>(this.Credentials, this.BaseUri);
getCmd.ApplyRequestOptions(options);
getCmd.RetrieveResponseStream = true;
getCmd.BuildRequestDelegate = (uri, builder, serverTimeout, ctx) => ContainerHttpWebRequestFactory.List(uri, serverTimeout, listingContext, detailsIncluded, ctx);
getCmd.SignRequest = this.AuthenticationHandler.SignRequest;
getCmd.PreProcessResponse = (cmd, resp, ex, ctx) => HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.OK, resp, null /* retVal */, cmd, ex, ctx);
getCmd.PostProcessResponse = (cmd, resp, ex, ctx) =>
{
ListContainersResponse listContainersResponse = new ListContainersResponse(cmd.ResponseStream);
List<CloudBlobContainer> containersList = new List<CloudBlobContainer>(
listContainersResponse.Containers.Select(item => new CloudBlobContainer(item.Properties, item.Metadata, item.Name, this)));
BlobContinuationToken continuationToken = null;
if (listContainersResponse.NextMarker != null)
{
continuationToken = new BlobContinuationToken()
{
NextMarker = listContainersResponse.NextMarker,
};
}
return new ResultSegment<CloudBlobContainer>(containersList)
{
ContinuationToken = continuationToken,
};
};
return getCmd;
}
示例8: PutPageImpl
/// <summary>
/// Implementation method for the WritePage methods.
/// </summary>
/// <param name="pageData">The page data.</param>
/// <param name="startOffset">The start offset.</param>
/// <param name="contentMD5">The content MD5.</param>
/// <param name="accessCondition">An <see cref="AccessCondition"/> object that represents the access conditions for the blob. If <c>null</c>, no condition is used.</param>
/// <param name="options">A <see cref="BlobRequestOptions"/> object that specifies any additional options for the request.</param>
/// <returns>A <see cref="RESTCommand{T}"/> that writes the pages.</returns>
private RESTCommand<NullType> PutPageImpl(Stream pageData, long startOffset, string contentMD5, AccessCondition accessCondition, BlobRequestOptions options)
{
if (startOffset % Constants.PageSize != 0)
{
CommonUtils.ArgumentOutOfRange("startOffset", startOffset);
}
long offset = pageData.Position;
long length = pageData.Length - offset;
PageRange pageRange = new PageRange(startOffset, startOffset + length - 1);
PageWrite pageWrite = PageWrite.Update;
if ((1 + pageRange.EndOffset - pageRange.StartOffset) % Constants.PageSize != 0 ||
(1 + pageRange.EndOffset - pageRange.StartOffset) == 0)
{
CommonUtils.ArgumentOutOfRange("pageData", pageData);
}
RESTCommand<NullType> putCmd = new RESTCommand<NullType>(this.ServiceClient.Credentials, this.Uri);
putCmd.ApplyRequestOptions(options);
putCmd.SendStream = pageData;
putCmd.RecoveryAction = (cmd, ex, ctx) => RecoveryActions.SeekStream(cmd, ex, ctx, offset);
putCmd.BuildRequestDelegate = (uri, builder, serverTimeout, ctx) => BlobHttpWebRequestFactory.PutPage(uri, serverTimeout, pageRange, pageWrite, accessCondition, ctx);
putCmd.SetHeaders = (r, ctx) =>
{
if (!string.IsNullOrEmpty(contentMD5))
{
r.Headers.Set(HttpRequestHeader.ContentMd5, contentMD5);
}
};
putCmd.SignRequest = this.ServiceClient.AuthenticationHandler.SignRequest;
putCmd.PreProcessResponse = (cmd, resp, ex, ctx) =>
{
HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.Created, resp, NullType.Value, cmd, ex, ctx);
CloudBlobSharedImpl.ParseSizeAndLastModified(this.attributes, resp);
return NullType.Value;
};
return putCmd;
}
示例9: CreateSnapshotImpl
/// <summary>
/// Implementation for the CreateSnapshot method.
/// </summary>
/// <param name="metadata">A collection of name-value pairs defining the metadata of the snapshot, or null.</param>
/// <param name="accessCondition">An <see cref="AccessCondition"/> object that represents the access conditions for the blob. If <c>null</c>, no condition is used.</param>
/// <param name="options">A <see cref="BlobRequestOptions"/> object that specifies any additional options for the request.</param>
/// <returns>A <see cref="RESTCommand{T}"/> that creates the snapshot.</returns>
/// <remarks>If the <c>metadata</c> parameter is <c>null</c> then no metadata is associated with the request.</remarks>
private RESTCommand<CloudPageBlob> CreateSnapshotImpl(IDictionary<string, string> metadata, AccessCondition accessCondition, BlobRequestOptions options)
{
RESTCommand<CloudPageBlob> putCmd = new RESTCommand<CloudPageBlob>(this.ServiceClient.Credentials, this.Uri);
putCmd.ApplyRequestOptions(options);
putCmd.BuildRequestDelegate = (uri, builder, serverTimeout, ctx) => BlobHttpWebRequestFactory.Snapshot(uri, serverTimeout, accessCondition, ctx);
putCmd.SetHeaders = (r, ctx) =>
{
if (metadata != null)
{
BlobHttpWebRequestFactory.AddMetadata(r, metadata);
}
};
putCmd.SignRequest = this.ServiceClient.AuthenticationHandler.SignRequest;
putCmd.PreProcessResponse = (cmd, resp, ex, ctx) =>
{
HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.Created, resp, null /* retVal */, cmd, ex, ctx);
DateTimeOffset snapshotTime = NavigationHelper.ParseSnapshotTime(BlobHttpResponseParsers.GetSnapshotTime(resp));
CloudPageBlob snapshot = new CloudPageBlob(this.Name, snapshotTime, this.Container);
snapshot.attributes.Metadata = new Dictionary<string, string>(metadata ?? this.Metadata);
snapshot.attributes.Properties = new BlobProperties(this.Properties);
CloudBlobSharedImpl.ParseSizeAndLastModified(snapshot.attributes, resp);
return snapshot;
};
return putCmd;
}
示例10: CreateSnapshotImpl
/// <summary>
/// Implementation for the CreateSnapshot method.
/// </summary>
/// <param name="metadata">A collection of name-value pairs defining the metadata of the snapshot, or <c>null</c>.</param>
/// <param name="accessCondition">An <see cref="AccessCondition"/> object that represents the access conditions for the blob. If <c>null</c>, no condition is used.</param>
/// <param name="options">A <see cref="BlobRequestOptions"/> object that specifies additional options for the request.</param>
/// <returns>A <see cref="RESTCommand"/> that creates the snapshot.</returns>
/// <remarks>If the <c>metadata</c> parameter is <c>null</c> then no metadata is associated with the request.</remarks>
private RESTCommand<CloudPageBlob> CreateSnapshotImpl(IDictionary<string, string> metadata, AccessCondition accessCondition, BlobRequestOptions options)
{
RESTCommand<CloudPageBlob> putCmd = new RESTCommand<CloudPageBlob>(this.ServiceClient.Credentials, this.attributes.StorageUri);
options.ApplyToStorageCommand(putCmd);
putCmd.BuildRequest = (cmd, uri, builder, cnt, serverTimeout, ctx) =>
{
StorageRequestMessage msg = BlobHttpRequestMessageFactory.Snapshot(uri, serverTimeout, accessCondition, cnt, ctx, this.ServiceClient.GetCanonicalizer(), this.ServiceClient.Credentials);
if (metadata != null)
{
BlobHttpRequestMessageFactory.AddMetadata(msg, metadata);
}
return msg;
};
putCmd.PreProcessResponse = (cmd, resp, ex, ctx) =>
{
HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.Created, resp, null /* retVal */, cmd, ex);
DateTimeOffset snapshotTime = NavigationHelper.ParseSnapshotTime(BlobHttpResponseParsers.GetSnapshotTime(resp));
CloudPageBlob snapshot = new CloudPageBlob(this.Name, snapshotTime, this.Container);
snapshot.attributes.Metadata = new Dictionary<string, string>(metadata ?? this.Metadata);
snapshot.attributes.Properties = new BlobProperties(this.Properties);
CloudBlob.UpdateETagLMTLengthAndSequenceNumber(snapshot.attributes, resp, false);
return snapshot;
};
return putCmd;
}
示例11: GetPermissionsImpl
/// <summary>
/// Implementation for the GetPermissions method.
/// </summary>
/// <param name="accessCondition">An <see cref="AccessCondition"/> object that represents the access conditions for the container. If <c>null</c>, no condition is used.</param>
/// <param name="options">A <see cref="BlobRequestOptions"/> object that specifies additional options for the request.</param>
/// <returns>A <see cref="RESTCommand"/> that gets the permissions.</returns>
private RESTCommand<BlobContainerPermissions> GetPermissionsImpl(AccessCondition accessCondition, BlobRequestOptions options)
{
BlobContainerPermissions containerAcl = null;
RESTCommand<BlobContainerPermissions> getCmd = new RESTCommand<BlobContainerPermissions>(this.ServiceClient.Credentials, this.StorageUri);
options.ApplyToStorageCommand(getCmd);
getCmd.CommandLocationMode = CommandLocationMode.PrimaryOrSecondary;
getCmd.RetrieveResponseStream = true;
getCmd.Handler = this.ServiceClient.AuthenticationHandler;
getCmd.BuildClient = HttpClientFactory.BuildHttpClient;
getCmd.BuildRequest = (cmd, uri, builder, cnt, serverTimeout, ctx) => ContainerHttpRequestMessageFactory.GetAcl(uri, serverTimeout, accessCondition, cnt, ctx);
getCmd.PreProcessResponse = (cmd, resp, ex, ctx) =>
{
HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.OK, resp, null /* retVal */, cmd, ex);
containerAcl = new BlobContainerPermissions()
{
PublicAccess = ContainerHttpResponseParsers.GetAcl(resp),
};
return containerAcl;
};
getCmd.PostProcessResponse = (cmd, resp, ctx) =>
{
this.UpdateETagAndLastModified(resp);
return Task.Factory.StartNew(() =>
{
ContainerHttpResponseParsers.ReadSharedAccessIdentifiers(cmd.ResponseStream, containerAcl);
return containerAcl;
});
};
return getCmd;
}
示例12: SetPermissionsImpl
/// <summary>
/// Implementation for the SetPermissions method.
/// </summary>
/// <param name="acl">The permissions to set.</param>
/// <param name="accessCondition">An <see cref="AccessCondition"/> object that represents the access conditions for the container. If <c>null</c>, no condition is used.</param>
/// <param name="options">A <see cref="BlobRequestOptions"/> object that specifies additional options for the request.</param>
/// <returns>A <see cref="RESTCommand"/> that sets the permissions.</returns>
private RESTCommand<NullType> SetPermissionsImpl(BlobContainerPermissions acl, AccessCondition accessCondition, BlobRequestOptions options)
{
MultiBufferMemoryStream memoryStream = new MultiBufferMemoryStream(null /* bufferManager */, (int)(1 * Constants.KB));
BlobRequest.WriteSharedAccessIdentifiers(acl.SharedAccessPolicies, memoryStream);
RESTCommand<NullType> putCmd = new RESTCommand<NullType>(this.ServiceClient.Credentials, this.StorageUri);
options.ApplyToStorageCommand(putCmd);
putCmd.Handler = this.ServiceClient.AuthenticationHandler;
putCmd.BuildClient = HttpClientFactory.BuildHttpClient;
putCmd.BuildRequest = (cmd, uri, builder, cnt, serverTimeout, ctx) => ContainerHttpRequestMessageFactory.SetAcl(uri, serverTimeout, acl.PublicAccess, accessCondition, cnt, ctx);
putCmd.BuildContent = (cmd, ctx) => HttpContentFactory.BuildContentFromStream(memoryStream, 0, memoryStream.Length, null /* md5 */, cmd, ctx);
putCmd.PreProcessResponse = (cmd, resp, ex, ctx) =>
{
HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.OK, resp, NullType.Value, cmd, ex);
this.UpdateETagAndLastModified(resp);
return NullType.Value;
};
return putCmd;
}
示例13: SetMetadataImpl
/// <summary>
/// Implementation for the SetMetadata method.
/// </summary>
/// <param name="accessCondition">An <see cref="AccessCondition"/> object that represents the access conditions for the container. If <c>null</c>, no condition is used.</param>
/// <param name="options">A <see cref="BlobRequestOptions"/> object that specifies additional options for the request.</param>
/// <returns>A <see cref="RESTCommand"/> that sets the metadata.</returns>
private RESTCommand<NullType> SetMetadataImpl(AccessCondition accessCondition, BlobRequestOptions options)
{
RESTCommand<NullType> putCmd = new RESTCommand<NullType>(this.ServiceClient.Credentials, this.StorageUri);
options.ApplyToStorageCommand(putCmd);
putCmd.Handler = this.ServiceClient.AuthenticationHandler;
putCmd.BuildClient = HttpClientFactory.BuildHttpClient;
putCmd.BuildRequest = (cmd, uri, builder, cnt, serverTimeout, ctx) =>
{
HttpRequestMessage msg = ContainerHttpRequestMessageFactory.SetMetadata(uri, serverTimeout, accessCondition, cnt, ctx);
ContainerHttpRequestMessageFactory.AddMetadata(msg, this.Metadata);
return msg;
};
putCmd.PreProcessResponse = (cmd, resp, ex, ctx) =>
{
HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.OK, resp, NullType.Value, cmd, ex);
this.UpdateETagAndLastModified(resp);
return NullType.Value;
};
return putCmd;
}
示例14: ExistsImpl
/// <summary>
/// Implementation for the Exists method.
/// </summary>
/// <param name="options">A <see cref="BlobRequestOptions"/> object that specifies additional options for the request.</param>
/// <param name="primaryOnly">If <c>true</c>, the command will be executed against the primary location.</param>
/// <returns>A <see cref="RESTCommand"/> that checks existence.</returns>
private RESTCommand<bool> ExistsImpl(BlobRequestOptions options, bool primaryOnly)
{
RESTCommand<bool> getCmd = new RESTCommand<bool>(this.ServiceClient.Credentials, this.StorageUri);
options.ApplyToStorageCommand(getCmd);
getCmd.CommandLocationMode = primaryOnly ? CommandLocationMode.PrimaryOnly : CommandLocationMode.PrimaryOrSecondary;
getCmd.Handler = this.ServiceClient.AuthenticationHandler;
getCmd.BuildClient = HttpClientFactory.BuildHttpClient;
getCmd.BuildRequest = (cmd, uri, builder, cnt, serverTimeout, ctx) => ContainerHttpRequestMessageFactory.GetProperties(uri, serverTimeout, null /* accessCondition */, cnt, ctx);
getCmd.PreProcessResponse = (cmd, resp, ex, ctx) =>
{
if (resp.StatusCode == HttpStatusCode.NotFound)
{
return false;
}
HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.OK, resp, true, cmd, ex);
this.Properties = ContainerHttpResponseParsers.GetProperties(resp);
this.Metadata = ContainerHttpResponseParsers.GetMetadata(resp);
return true;
};
return getCmd;
}
示例15: FetchAttributesImpl
/// <summary>
/// Implementation for the FetchAttributes method.
/// </summary>
/// <param name="accessCondition">An <see cref="AccessCondition"/> object that represents the access conditions for the container. If <c>null</c>, no condition is used.</param>
/// <param name="options">A <see cref="BlobRequestOptions"/> object that specifies additional options for the request.</param>
/// <returns>A <see cref="RESTCommand"/> that fetches the attributes.</returns>
private RESTCommand<NullType> FetchAttributesImpl(AccessCondition accessCondition, BlobRequestOptions options)
{
RESTCommand<NullType> getCmd = new RESTCommand<NullType>(this.ServiceClient.Credentials, this.StorageUri);
options.ApplyToStorageCommand(getCmd);
getCmd.CommandLocationMode = CommandLocationMode.PrimaryOrSecondary;
getCmd.Handler = this.ServiceClient.AuthenticationHandler;
getCmd.BuildClient = HttpClientFactory.BuildHttpClient;
getCmd.BuildRequest = (cmd, uri, builder, cnt, serverTimeout, ctx) => ContainerHttpRequestMessageFactory.GetProperties(uri, serverTimeout, accessCondition, cnt, ctx);
getCmd.PreProcessResponse = (cmd, resp, ex, ctx) =>
{
HttpResponseParsers.ProcessExpectedStatusCodeNoException(HttpStatusCode.OK, resp, NullType.Value, cmd, ex);
this.Properties = ContainerHttpResponseParsers.GetProperties(resp);
this.Metadata = ContainerHttpResponseParsers.GetMetadata(resp);
return NullType.Value;
};
return getCmd;
}