Вызов хранимой процедуры CosmosDB из API Management Service - PullRequest
0 голосов
/ 18 сентября 2018

Мне бы хотелось, чтобы один из моих API в Службе управления API вызвал хранимую процедуру в CosmosDB и возвратил ее результат. Кажется, по этому вопросу не так много документации.

Моя попытка до сих пор:

  • Интерфейс: метод GET с тремя параметрами
  • Входящая обработка: я адаптировал код из этого вопроса следующим образом

</p> <pre><code><policies> <inbound> <base /> <set-variable name="Content-Type" value="application/query+json" /> <set-variable name="x-ms-documentdb-isquery" value="True" /> <set-variable name="x-ms-documentdb-query-enablecrosspartition" value="False" /> <set-variable name="x-ms-max-item-count" value="1000" /> <set-variable name="x-ms-version" value="2017-02-22" /> <set-variable name="x-ms-date" value="@( DateTime.UtcNow.ToString("R") )" /> <set-header name="Content-Type" exists-action="override"> <value>@((string)context.Variables["Content-Type"])</value> </set-header> <set-header name="x-ms-documentdb-isquery" exists-action="override"> <value>@((string)context.Variables["x-ms-documentdb-isquery"])</value> </set-header> <set-header name="x-ms-documentdb-query-enablecrosspartition" exists-action="override"> <value>@((string)context.Variables["x-ms-documentdb-query-enablecrosspartition"])</value> </set-header> <set-header name="x-ms-max-item-count" exists-action="override"> <value>@((string)context.Variables["x-ms-max-item-count"])</value> </set-header> <set-header name="x-ms-version" exists-action="override"> <value>@((string)context.Variables["x-ms-version"])</value> </set-header> <set-header name="x-ms-documentdb-partitionkey" exists-action="override"> <value>@("[\""+context.Subscription.Id+"\"]")</value> </set-header> <set-header name="x-ms-date" exists-action="override"> <value>@( (string)context.Variables["x-ms-date"] )</value> </set-header> <set-variable name="StringToSign" value="@(string.Format("post\nsprocs\ndbs/{myDBName}/colls/{myCollName}\n{0}\n\n", ((string)context.Variables["x-ms-date"]).ToLowerInvariant()))" /> <set-variable name="cosmosreadwritekey" value="{{MyMasterKeyInReadWriteMode}}" /> <set-variable name="SharedKey" value="@{ // https://docs.microsoft.com/en-us/rest/api/documentdb/access-control-on-documentdb-resources#constructkeytoken System.Security.Cryptography.HMACSHA256 hasher = new System.Security.Cryptography.HMACSHA256(Convert.FromBase64String((string)context.Variables["cosmosreadwritekey"])); return Convert.ToBase64String(hasher.ComputeHash(System.Text.Encoding.UTF8.GetBytes((string)context.Variables["StringToSign"]))); }" /> <set-variable name="Authorization" value="@(string.Format("type=master&ver=1.0&sig={0}", ((string)context.Variables["SharedKey"]).Replace("&","%26").Replace("+","%2B").Replace("=","%3D")))" /> <set-header name="Authorization" exists-action="override"> <value>@((string)context.Variables["Authorization"])</value> </set-header> <set-backend-service base-url="https://{myCosmosName}.documents.azure.com" /> <rewrite-uri template="/dbs/{myDBName}/colls/{myCollName}/sprocs" /> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>

  • Backend: HTTPS заканчивается со следующим URL: https://{myCosmosName}.documents.azure.com/

Однако, когда я тестирую API, я систематически получаю следующее сообщение об ошибке:

Входной токен авторизации не может обслуживать запрос. Пожалуйста, проверьте, что ожидаемая полезная нагрузка построена в соответствии с протоколом, и проверьте используемый ключ. Сервер использовал следующую полезную нагрузку для подписи: 'get \ nsprocs \ ndbs / {myDBName} / colls / {myDBName} \ ntue, 18 сентября 2018 09:31:58 gmt \ n \ n' \ r \ nActivityId: 64586521-cf37- 44e5-80a4-bac0a9d3b261, Microsoft.Azure.Documents.Common / 2.0.0.0

Мои вопросы оттуда:

  • Как я могу заставить этот вызов работать для моей хранимой процедуры?
  • Как передать параметры API для вызова хранимой процедуры?

1 Ответ

0 голосов
/ 18 сентября 2018

Для отправки параметров взгляните на this .Похоже, что неправильно установлен токен авторизации, см. this .

...