Je souhaite utiliser l'API C++ Azure pour générer une signature d'accès partagé pour un conteneur sur Azure et obtenir la chaîne d'accès. Mais ne peux pas trouver un bon exemple. Presque tous les exemples sont en C#. Seulement trouvé cela, https://docs.microsoft.com/en-us/azure/storage/files/storage-c-plus-plus-how-to-use-filescomment obtenir la signature d'accès partagé du conteneur Azure par C++
Voici ce que je faisais,
// Retrieve a reference to a previously created container.
azure::storage::cloud_blob_container container = blob_client.get_container_reference(s2ws(eventID));
// Create the container if it doesn't already exist.
container.create_if_not_exists();
// Get the current permissions for the event.
auto blobPermissions = container.download_permissions();
// Create and assign a policy
utility::string_t policy_name = s2ws("Signature" + eventID);
azure::storage::blob_shared_access_policy policy = azure::storage::blob_shared_access_policy();
// set expire date
policy.set_expiry(utility::datetime::utc_now() + utility::datetime::from_days(10));
//give read and write permissions
policy.set_permissions(azure::storage::blob_shared_access_policy::permissions::read);
azure::storage::shared_access_policies<azure::storage::blob_shared_access_policy> policies;
//add the new shared policy
policies.insert(std::make_pair(policy_name, policy));
blobPermissions.set_policies(policies);
blobPermissions.set_public_access(azure::storage::blob_container_public_access_type::off);
container.upload_permissions(blobPermissions);
auto token = container.get_shared_access_signature(policy, policy_name);
Après l'exécution, je peux voir la politique est définie avec succès sur le conteneur, mais le jeton obtenu par la dernière ligne ne va pas. Et il y aura toujours une exception en quittant cette fonction, le point d'arrêt se trouve dans _Deallocate().
Quelqu'un pourrait me dire quel est le problème avec mon code? Ou quelques exemples à ce sujet? Merci beaucoup.
Edité
Le jeton je suis arrivé ressemble,
"sv=2016-05-31&si=Signature11111122222222&sig=JDW33j1Gzv00REFfr8Xjz5kavH18wme8E7vZ%2FFqUj3Y%3D&spr=https%2Chttp&se=2027-09-09T05%3A54%3A29Z&sp=r&sr=c"
A ce titre, je ne pouvais pas accéder à mes blobs. Le jeton droit créé par « Microsoft Azure Storage Explorer » à l'aide de cette politique ressemble,
?sv=2016-05-31&si=Signature11111122222222&sr=c&sig=9tS91DUK7nkIlIFZDmdAdlNEfN2HYYbvhc10iimP1sk%3D
A propos de l'exception, je mets tout ce code dans une fonction. Si sans la dernière ligne, tout va bien. Mais si vous ajoutez la dernière ligne, tout en quittant cette fonction, elle lèvera une exception et indiquera qu'un point d'arrêt a été déclenché. Il est arrêté à la dernière ligne de _Deallocate() dans "C: \ Microsoft Visual Studio \ 2017 \ Communauté \ VC \ Tools \ MSVC \ 14.10.25017 \ include \ xmemory0",
::operator delete(_Ptr);
pourquoi ce n'ai aucune idée exception étant jeté et comment déboguer car il semble qu'il ne peut pas être attrapé par mon code.
sous la direction
Après changé la dernière ligne,
auto token = container.get_shared_access_signature(azure::storage::blob_shared_access_policy(), policy_name);
Le jeton retourné est juste, je peux accéder à mes blobs en l'utilisant. Mais l'exception ennuyeux est toujours là :-(
Edité
juste trouvé l'exception a eu lieu que lors de la construction de débogage. Si dans la version, tout est ok. Alors peut-être qu'il est lié à la compilation de l'environnement.
Pouvez-vous décrire ce que vous voulez dire par «mais le jeton obtenu par la dernière ligne n'est pas correct». S'il vous plaît modifier votre question et inclure cette information. Veuillez également inclure les détails de l'exception que vous recevez. –
Merci pour la réponse. Modifié @GauravMantri – Harrison
Avez-vous encore besoin d'une explication sur la raison pour laquelle le jeton de Microsoft Azure Explorer a fonctionné et que le jeton que vous avez reçu (avant modification) ne l'a pas fait? S'il vous plaît faites le moi savoir et je vais fournir des détails. –