internal HttpMessage CreateCreateRequest(SearchAlias @alias) { var message = _pipeline.CreateMessage(); var request = message.Request; request.Method = RequestMethod.Post; var uri = new RawRequestUriBuilder(); uri.AppendRaw(_endpoint, false); uri.AppendPath("/aliases", false); uri.AppendQuery("api-version", _apiVersion, true); request.Uri = uri; request.Headers.Add("Accept", "application/json; odata.metadata=minimal"); request.Headers.Add("Content-Type", "application/json"); var content = new Utf8JsonRequestContent(); content.JsonWriter.WriteObjectValue(@alias); request.Content = content; return(message); }
public async Task <Response <SearchAlias> > CreateAsync(SearchAlias @alias, CancellationToken cancellationToken = default) { if (@alias == null) { throw new ArgumentNullException(nameof(@alias)); } using var message = CreateCreateRequest(@alias); await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false); switch (message.Response.Status) { case 201: { SearchAlias value = default; using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, cancellationToken).ConfigureAwait(false); value = SearchAlias.DeserializeSearchAlias(document.RootElement); return(Response.FromValue(value, message.Response)); }
/// <summary> /// Creates a new search alias or updates an alias if it already exists. /// </summary> /// <param name="aliasName">The name of the alias to create or update.</param> /// <param name="alias">The definition of the alias to create or update.</param> /// <param name="onlyIfUnchanged"> /// True to throw a <see cref="RequestFailedException"/> if the <see cref="SearchAlias.ETag"/> does not match the current alias version; /// otherwise, the current version will be overwritten. /// </param> /// <param name="cancellationToken">Optional <see cref="CancellationToken"/> to propagate notifications that the operation should be canceled.</param> /// <returns><see cref="SearchAlias"/> defined by <c>aliasName</c>.</returns> public virtual async Task <Response <SearchAlias> > CreateOrUpdateAliasAsync(string aliasName, SearchAlias alias, bool onlyIfUnchanged = false, CancellationToken cancellationToken = default) { using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(SearchIndexClient)}.{nameof(CreateOrUpdateAlias)}"); scope.Start(); try { return(await AliasesClient.CreateOrUpdateAsync(aliasName, alias, onlyIfUnchanged?alias.ETag?.ToString() : null, null, cancellationToken).ConfigureAwait(false)); } catch (Exception ex) { scope.Failed(ex); throw; } }