in src/Microsoft.Azure.NotificationHubs/NotificationHubClient.cs [3240:3287]
private async Task<TRegistration> CreateOrUpdateRegistrationImplAsync<TRegistration>(TRegistration registration, EntityOperatonType operationType, CancellationToken cancellationToken) where TRegistration : RegistrationDescription
{
registration = (TRegistration)registration.Clone();
registration.NotificationHubPath = _notificationHubPath;
registration.ExpirationTime = null;
RegistrationSDKHelper.ValidateRegistration(registration);
var requestUri = GetGenericRequestUriBuilder();
requestUri.Path += "registrations";
switch (operationType)
{
case EntityOperatonType.Create:
registration.ETag = null;
break;
case EntityOperatonType.CreateOrUpdate:
registration.ETag = null;
requestUri.Path += $"/{registration.RegistrationId}";
break;
case EntityOperatonType.Update:
requestUri.Path += $"/{registration.RegistrationId}";
break;
}
registration.RegistrationId = null;
return await _retryPolicy.RunOperation(async (ct) =>
{
using (var request = CreateHttpRequest(operationType == EntityOperatonType.Create ? HttpMethod.Post : HttpMethod.Put, requestUri.Uri, out var trackingId))
{
if (operationType == EntityOperatonType.Update)
{
request.Headers.Add(ManagementStrings.IfMatch, string.IsNullOrEmpty(registration.ETag) ? "*" : $"\"{registration.ETag}\"");
}
AddEntityToRequestContent(request, registration);
using (var response = await SendRequestAsync(request, trackingId, new[] { HttpStatusCode.OK, HttpStatusCode.Created }, ct).ConfigureAwait(false))
{
using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
{
return await ReadEntityAsync<TRegistration>(responseStream).ConfigureAwait(false);
}
}
}
}, cancellationToken);
}