/// <summary> /// Prepare and send an HTTP API call to obtain details for a specific extension available for the current /// OpenStack Identity Service V2 endpoint. /// </summary> /// <param name="service">The <see cref="IIdentityService"/> instance.</param> /// <param name="alias">The unique alias identifying the extension.</param> /// <param name="cancellationToken">The <seealso cref="CancellationToken"/> that the task will observe.</param> /// <returns> /// A <seealso cref="Task"/> representing the asynchronous operation. When the task completes successfully, the /// <see cref="Task{TResult}.Result"/> property will contain an <see cref="Extension"/> instance describing the /// extension. /// </returns> /// <exception cref="ArgumentNullException"> /// <para>If <paramref name="service"/> is <see langword="null"/>.</para> /// <para>-or-</para> /// <para>If <paramref name="alias"/> is <see langword="null"/>.</para> /// </exception> /// <exception cref="HttpWebException"> /// If an error occurs during an HTTP request as part of preparing or sending the API call. /// </exception> /// <seealso cref="IIdentityService.PrepareGetExtensionAsync"/> /// <seealso href="http://developer.openstack.org/api-ref-identity-v2.html#identity-api-extensions">Extensions (Identity API v2.0 - OpenStack Complete API Reference)</seealso> public static Task<Extension> GetExtensionAsync(this IIdentityService service, ExtensionAlias alias, CancellationToken cancellationToken) { if (service == null) throw new ArgumentNullException("service"); if (alias == null) throw new ArgumentNullException("alias"); return TaskBlocks.Using( () => service.PrepareGetExtensionAsync(alias, cancellationToken), task => task.Result.SendAsync(cancellationToken).Select(innerTask => innerTask.Result.Item2.Extension)); }
/// <summary> /// Sets (or removes) the <c>marker</c> query parameter for a <see cref="ListExtensionsApiCall"/> HTTP API call. /// </summary> /// <param name="apiCall">The prepared HTTP API call.</param> /// <param name="alias"> /// <para>The alias of the last <see cref="Extension"/> in the previous page of results.</para> /// <para>-or-</para> /// <para><see langword="null"/> to remove the <c>marker</c> query parameter and have the resulting page start /// with the first item in the list.</para> /// </param> /// <returns>Returns the input argument <paramref name="apiCall"/>, which was modified according to the /// specified <paramref name="alias"/>.</returns> /// <exception cref="ArgumentNullException"> /// If <paramref name="apiCall"/> is <see langword="null"/>. /// </exception> /// <exception cref="ObjectDisposedException">If the HTTP API call has been disposed.</exception> /// <exception cref="InvalidOperationException">If the HTTP API call has already been sent.</exception> /// <seealso href="http://docs.openstack.org/api/openstack-identity-service/2.0/content/Paginated_Collections-d1e325.html">Paginated collections (OpenStack Identity API v2.0 Reference)</seealso> public static ListExtensionsApiCall WithMarker(this ListExtensionsApiCall apiCall, ExtensionAlias alias) { if (apiCall == null) throw new ArgumentNullException("apiCall"); if (alias == null) throw new ArgumentNullException("alias"); Uri uri = apiCall.RequestMessage.RequestUri; if (alias == null) apiCall.RequestMessage.RequestUri = UriUtility.RemoveQueryParameter(uri, "marker"); else apiCall.RequestMessage.RequestUri = UriUtility.SetQueryParameter(uri, "marker", alias.Value); return apiCall; }
public HttpResponseMessage GetExtension([FromUri(Name = "alias")] string aliasString) { ValidateRequest(Request); ExtensionAlias alias = new ExtensionAlias(aliasString); JObject allExtensions = JsonConvert.DeserializeObject <JObject>(IdentityServiceResources.ListExtensionsResponse); Extension[] extensions = allExtensions["extensions"]["values"].ToObject <Extension[]>(); Extension extension = extensions.FirstOrDefault(i => i.Alias.Equals(alias)); if (extension == null) { return(new HttpResponseMessage(HttpStatusCode.NotFound)); } else { HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); JObject responseObject = new JObject(new JProperty("extension", JObject.FromObject(extension))); result.Content = new StringContent(responseObject.ToString(Formatting.None), Encoding.UTF8, "application/json"); return(result); } }
public HttpResponseMessage GetExtension([FromUri(Name = "alias")] string aliasString) { ValidateRequest(Request); ExtensionAlias alias = new ExtensionAlias(aliasString); JObject allExtensions = JsonConvert.DeserializeObject<JObject>(IdentityServiceResources.ListExtensionsResponse); Extension[] extensions = allExtensions["extensions"]["values"].ToObject<Extension[]>(); Extension extension = extensions.FirstOrDefault(i => i.Alias.Equals(alias)); if (extension == null) { return new HttpResponseMessage(HttpStatusCode.NotFound); } else { HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); JObject responseObject = new JObject(new JProperty("extension", JObject.FromObject(extension))); result.Content = new StringContent(responseObject.ToString(Formatting.None), Encoding.UTF8, "application/json"); return result; } }
/// <summary> /// Sets (or removes) the <c>marker</c> query parameter for a <see cref="ListExtensionsApiCall"/> HTTP API call. /// </summary> /// <remarks> /// <para>This method simplifies the use of <see cref="WithMarker(ListExtensionsApiCall, ExtensionAlias)"/> in /// scenarios where <see langword="async/await"/> are not used for the preparation of the HTTP API call.</para> /// </remarks> /// <param name="apiCall">A <see cref="Task"/> representing the asynchronous operation to prepare the HTTP API /// call.</param> /// <param name="alias"> /// <para>The alias of the last <see cref="Extension"/> in the previous page of results.</para> /// <para>-or-</para> /// <para><see langword="null"/> to remove the <c>marker</c> query parameter and have the resulting page start /// with the first item in the list.</para> /// </param> /// <returns>A <see cref="Task"/> representing the asynchronous operation. When the task completes successfully, /// the <see cref="Task{TResult}.Result"/> property contains the result of the input task /// <paramref name="apiCall"/>, which was modified according to the specified /// <paramref name="alias"/>.</returns> /// <exception cref="ArgumentNullException"> /// If <paramref name="apiCall"/> is <see langword="null"/>. /// </exception> /// <exception cref="ObjectDisposedException">If the HTTP API call has been disposed.</exception> /// <exception cref="InvalidOperationException">If the HTTP API call has already been sent.</exception> /// <seealso href="http://docs.openstack.org/api/openstack-identity-service/2.0/content/Paginated_Collections-d1e325.html">Paginated collections (OpenStack Identity API v2.0 Reference)</seealso> public static Task<ListExtensionsApiCall> WithMarker(this Task<ListExtensionsApiCall> apiCall, ExtensionAlias alias) { return apiCall.Select(task => apiCall.Result.WithMarker(alias)); }