private async Task CreateOrUpdateNotificationHubAsync()

in src/Microsoft.Azure.NotificationHubs/NamespaceManager.cs [414:455]


        private async Task<NotificationHubDescription> CreateOrUpdateNotificationHubAsync(NotificationHubDescription description, bool update, CancellationToken cancellationToken)
        {
            if (description == null)
            {
                throw new ArgumentNullException(nameof(description));
            }

            var requestUri = new UriBuilder(_baseUri)
            {
                Scheme = Uri.UriSchemeHttps,
                Path = description.Path,
                Query = $"api-version={ManagementStrings.ApiVersion}"
            };
            var xmlBody = CreateRequestBody(description);

            return await _retryPolicy.RunOperation(async (ct) =>
            {
                using (var response = await SendAsync(() =>
                {
                    var httpRequestMessage = CreateHttpRequest(HttpMethod.Put, requestUri.Uri);
                    httpRequestMessage.Content = new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes(xmlBody)));

                    if (update)
                    {
                        httpRequestMessage.Headers.Add("If-Match", "*");
                    }

                    return httpRequestMessage;
                }, ct).ConfigureAwait(false))
                {
                    var trackingId = string.Empty;
                    if (response.Headers.TryGetValues(TrackingIdHeaderKey, out var values))
                    {
                        trackingId = values.FirstOrDefault();
                    }
                    var xmlResponse = await GetXmlContent(response, trackingId).ConfigureAwait(false);
                    var model = GetModelFromResponse<NotificationHubDescription>(xmlResponse, trackingId);
                    model.Path = description.Path;
                    return model;
                };
            }, cancellationToken);
        }