您可以向共享访问策略添加多个事件中心规则吗?

Can you add more Event Hub rules to a Shared Access Policy than one?

创建事件中心后,我正在应用规则。例如,我能否将 Send 和 Listen 规则应用到同一个共享访问策略?

我尝试使用的代码似乎 "overwrite" 以前的规则。有更好的方法吗?

await eventHub.Update()
   .WithNewSendRule(sendListenRuleNames)
   .WithNewListenRule(sendListenRuleNames)
   .ApplyAsync();

上面的代码最终只会将监听规则应用于共享访问策略。

更新

在尝试了上面的方法后,我尝试使用Jay的评论来实现:

List<AccessRights> accessRights = new List<AccessRights>();
accessRights.Add(AccessRights.Listen);
accessRights.Add(AccessRights.Manage);

foreach (var listenManageRuleNames in list)
{
   await eventHub.Manager
      .EventHubAuthorizationRules
      .Inner
.CreateOrUpdateAuthorizationRuleWithHttpMessagesAsync(eventHubResource.ResourceGroup.Name, eventHubNamespace.Name, eventHubResource.Name, listenManageRuleNames, accessRights);
}

但它最终给我这个错误:

"{\"error\":{\"message\":\"Error setting value to 'Rights' on 'Microsoft.Cloud.ServiceBus.ResourceProvider.ArmVersionedEntities.ArmAuthorizationRuleDescription'. \",\"code\":\"BadRequest\"}}"

更新 2 我只是尝试只做 AccessRights.Listen 并且它起作用了。在那之后我尝试只做 AccessRights.Manage 但它没有用,并抛出同样的错误。

找到方法了!

List<AccessRights> accessRights = new LinkedList<>();
        accessRights.add(AccessRights.LISTEN);
        accessRights.add(AccessRights.SEND);

azure.eventHubNamespaces().authorizationRules()
                    .manager()
                    .namespaceAuthorizationRules()
                    .inner()
                  .createOrUpdateAuthorizationRule("resourceGroup","namespace","policyname",accessRights);

REST API method name 获取提示并尝试在源代码中找到相似的名称。

添加

应该可以
accessRights.Add(AccessRights.Send);

使用 C# SDK 还是 Java 都没有关系;在水下,它们都使用相同的 REST API,您可以用它进行实验,例如here.

仅添加 'Manage' 权限对我不起作用:

{ "properties": { "rights": [ "Manage" ] } }

大概是因为 'Manage' 自动授予 'Send' 和 'Listen'。这在通过门户添加 SAS 策略时的对话框中显而易见:

将负载更改为

{ "properties": { "rights": [ "Manage", "Listen", "Send" ] } }

帮我修好了。