Azure 事件中心:创建记录器 - 400 无效的主机名

Azure Event Hub : Create Logger - 400 Invalid Hostname

我正在尝试使用 Azure APIM 创建概念验证,但遇到 400 无效主机名错误。

我试过按照这个例子

https://docs.microsoft.com/en-gb/azure/api-management/api-management-howto-log-event-hubs

将我带到此页面

https://docs.microsoft.com/en-us/rest/api/apimanagement/2019-12-01/logger/createorupdate

我在邮递员中使用以下 url 的 put 命令,编辑了个人详细信息

https://management.azure.com/subscriptions/xxxxx-yyyy-zzz-a4ed-b0b5ddddddd/resourceGroups/xx-Trial/providers/Microsoft.ApiManagement/service/xxx-API-Management-Services/loggers/loggerId?api-version=2019-12-01

这是作为 PUT 命令发送的

这也是正在发送的正文

{  
 "type": "AzureEventHub",  
 "description": "xx Poc description",  
 "credentials": {  
   "name": "apim",  
   "connectionString": "Endpoint=sb://xx-poc.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=yyyyyyK/ixxxxxxxxxxxxxxc="  
 }  
}  

返回的响应是

<h2>Bad Request - Invalid Hostname</h2>
<hr>
<p>HTTP Error 400. The request hostname is invalid.</p>

如果有人能帮助我取得进展,我将不胜感激,因为我看不到我错过了什么。

谢谢

我认为请求正文有问题。

{  
 "type": "AzureEventHub",  
 "description": "xx Poc description",  
 "credentials": {  
   "name": "apim",  
   "connectionString": "Endpoint=sb://xx-poc.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=yyyyyyK/ixxxxxxxxxxxxxxc="  
 }  
}

请检查请求正文中的以下设置:

  1. 对于名称,请确保它是事件中心实例名称,而不是 Eventhub 命名空间名称。你可以参考这个 doc 了解更多关于它们的细节。

  2. 对于connectionString,请确保它是Eventhub命名空间连接字符串(不要使用Eventhub实例级别连接字符串)。更多详情,请参考此doc.

最后,请同时检查eventhub实例是否被禁用。

经过几个小时的搜索,我终于偶然发现了这个 url https://www.svenmalvik.com/azure-apim-with-eventhub/,它解决了我的问题。

我在设置方面做的一切都正确,但这是缺少的最后一步

$apimCtx = New-AzApiManagementContext -ResourceGroupName "xx-Trial" -ServiceName "xx-API-Management-Services"
$ehConnection = (Get-AzEventHubKey -ResourceGroupName "xx-Trial" -NamespaceName "xx-yyy-zzz-eh-ns" -AuthorizationRuleName "xx-yyy-zzz-eh-auth-rule").PrimaryConnectionString
New-AzApiManagementLogger -Context $apimCtx -LoggerId "simon-logger" -Name "simon-logger" -ConnectionString "$ehConnection;EntityPath=xx-yyy-eh"