【问题标题】:Azure Blockchain Workbench REST API returns 204 No contentAzure Blockchain Workbench REST API 返回 204 无内容
【发布时间】:2019-01-20 17:48:12
【问题描述】:

我创建并分发了一个区块链工作台项目。 我可以访问 Azure Blockchain Workbench 客户端网站,在那里我可以创建合同、采取行动等。

我尝试开发一个简单的程序来使用 Azure Blockchain Workbench REST API 与我自己的应用程序与区块链进行交互。

在调用任何 API 函数之前,我得到了身份验证令牌(我希望它是正确的,因为我得到了令牌的值)

如果现在我尝试调用 API 函数“https://myblockchain-xyz-api.azurewebsites.net/api/v2/users”,那么我会得到用户列表。

但是,如果现在我尝试调用有关区块链应用程序的任何其他函数,例如“/api/v2/applications”,我会得到返回码 204“无内容”。

如果我尝试调用例如“/api/v2/applications/2/workflows”,则会得到 404“未找到”

在 API 调用之后:

Dim MyOauthToken As String = 
Utilities.BlockchainAuthentication.GetAuthenticationToken().Result

Dim MyHttpClient As New HttpClient()
MyHttpClient.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", MyOauthToken)
'--------------------------------------------------------
'Force security protocol
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 Or SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12
'---------------------------------------------------------
'Get list of applications
Dim MyServiceUriString As String = "https://myblockchain-xyz-api.azurewebsites.net/api/v2/users/applications"
Dim MyResponse As Task(Of HttpResponseMessage) = MyHttpClient.GetAsync(MyServiceUriString)
MyResponse.Wait()

“应用程序”功能的结果是 204 “无内容” 如果我执行相同的调用“.../api/v2/users”,它会起作用并且我会获得所有用户。

有人可以帮忙吗?

我尝试调用“../users/me”来查看会发生什么,我得到以下结果(我不知道这是否有帮助):

{"currentUser":{"userID":7,"externalID":"1r67sf88-5b49-47da-a27a-79g3gg345","firstName":null,"lastName":"","emailAddress":null, "userChainMappings":[{"userChainMappingID":5,"userID":7,"connectionID":1,"chainIdentifier":"0x32cfcf169813364563456348c99b9","chainBalance":null}]},"capabilities":{"canUploadApplication": false,"canUploadContractCode":false,"canModifyRoleAssignments":false,"canProvisionUser":false,"canUpgradeWorkbench":false}}

【问题讨论】:

  • 您的令牌必须正确,否则您将收到所有这些调用的 401 Unauthorized 响应。关于 204 No Content 响应,您是否提供了无效的 skip 参数,或者您根本没有应用程序?此外,关于 404 Not Found,是否有可能应用程序 #2 根本不存在?
  • 我试过没有任何参数和以下参数 "/applications?sortBy=DisplayName&enabled=true&top=50&skip=0&isLatestVersion=false" 但我总是得到 204 No content。我有 3 个应用程序,如果我将 SQL 服务器连接到链下数据库,我还可以查看它们的 ID 为 1、2 和 3
  • @Stefano 你解决了吗?我面临同样的问题。 Azure Active Directory 中的 api 角色似乎有些配置错误...
  • 我能够创建新用户,但是当我使用 users/me 时,我得到的响应与您得到的相同。有什么办法改变吗?

标签: azure blockchain azure-blockchain-workbench


【解决方案1】:

问题在于链下数据库中的默认用户(由部署 Azure Blockchain Workbench 创建)未映射到任何应用程序。 就像解决方法一样 - 您始终可以在 DB 中手动添加此映射,之后您将能够获取应用程序(并使用合同等)。

你需要做什么:

  1. 查找使用 Azure Blockchain Workbench 进行预配的应用程序(Web api)的外部用户 ID。

    • 导航到 Azure Azcive 目录
    • 企业应用程序
    • 在下拉列表中选择所有应用程序并按应用
    • 现在你可以看到类似Azure Blockchain Workbench blockchaintest-XXXXX
    • 选择一个项目,您将在浏览器地址栏中获得 external_id(行中的最后一个 guid)
  2. 为您创建的 AZ BCW 查找资源组并查找 SQL 数据库

  3. 用于附加到 DB 的用户查询编辑器(预览版)
  4. 在步骤 1 中使用 external_id 在 dbo.User 中查找用户 ID
  5. 在 dbo.Application 中查找应用程序 ID
  6. 使用步骤 4 中的用户 ID 和步骤 5 中的应用 ID 将新记录添加到 dbo.RoleAssignment

现在应该可以了

curl -H "Authorization: Bearer ${TOKEN}" -X GET 'https://blockchaintest-XXXXX-api.azurewebsites.net/api/v1/applications?isLatestVetsion=true' 
{"nextLink":"/api/v1/applications?skip=1","applications":[{"id":10,"version":"9.0","name":"CCCCC","description":"CCCCCCC","displayName":"CCCCCCCC","createdByUserId":2,"createdDtTm":"2019-04-30T05:13:40.87","enabled":true,"blobStorageURL":null,"isLatestVersion":null,"applicationRoles":null}]}

【讨论】:

    猜你喜欢
    • 2016-06-14
    • 2022-10-18
    • 2020-02-08
    • 1970-01-01
    • 2022-10-18
    • 2018-07-11
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    相关资源
    最近更新 更多