我创建并分发了一个区块链工作台项目。我可以访问Azure Blockchain Workbench客户端网站,在那里我可以创建合同、采取行动等。
我尝试开发一个简单的程序,使用Azure Blockchain Workbench REST API与我自己的应用程序进行区块链交互。
在调用任何API函数之前,我会得到身份验证令牌(我希望它是正确的,因为我得到了令牌的值)
如果现在我尝试调用API函数"https://myblockchain-xyz-api.azurewebsites.net/api/v2/users",然后我得到了用户列表。
然而,如果现在我尝试调用任何其他关于区块链应用程序的函数,例如"/api/v2/应用程序",我会得到返回代码204"无内容"。
例如,如果我尝试调用"/api/v2/应用程序/2/工作流",那么我会得到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/me"看看会发生什么,我得到了以下结果(我不知道这是否有帮助):
{"currentUser":{"userID":7,"externalID":"1r67sf88-5b49-47da-a27a-79g3gg345","firstName":null,"lastName":","emailAddress":null,"capabilities":{"canUploadApplication":false,"canUpload ContractCode":false、"canModifyRoleAssignments":false和"canProvisionUser":false以及"canUpgradeWorkbench":false}}
问题是链外数据库中的默认用户(通过部署Azure Blockchain Workbench创建)没有映射到任何应用程序。正如解决方法一样,您可以始终在DB中手动添加此映射,之后您将能够获得应用程序(并使用合同等)。
你需要做什么:
-
为应用程序(web api)查找外部用户id,该应用程序是使用Azure Blockchain Workbench进行配置的。
- 导航到Azure Azcive目录
- 企业应用程序
- 在下拉菜单中选择所有aps,然后按apply
- 现在您可以看到类似
Azure Blockchain Workbench blockchaintest-XXXXX
的内容 - 选择一个项目,您将在浏览器地址栏中获得external_id(行中的最后一个guid)
-
查找您创建的AZ BCW的资源组并查找SQL数据库
- 用于附加到数据库的用户查询编辑器(预览)
- 在dbo中查找用户ID。步骤1中具有external_id的用户
- 在dbo中查找应用程序ID。应用程序
- 将新记录添加到dbo。具有步骤4中的用户id和步骤5中的应用程序id的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}]}