您可以向共享访问策略添加多个事件中心规则吗?
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" ] } }
帮我修好了。
创建事件中心后,我正在应用规则。例如,我能否将 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" ] } }
帮我修好了。