J'ai créé plusieurs conteneurs dans un stockage d'azur et ont également téléchargé certains fichiers dans ces conteneurs. Maintenant, je dois donner accès au niveau de domaine au conteneur / blobs. Je l'ai donc essayé du niveau de code comme ci-dessous.
<CorsRule> <AllowedOrigins>http://www.contoso.com, http://www.fabrikam.com</AllowedOrigins> <AllowedMethods>PUT,GET</AllowedMethods> <AllowedHeaders>x-ms-meta-data*,x-ms-meta-target,x-ms-meta-source</AllowedHeaders> <ExposedHeaders>x-ms-meta-*</ExposedHeaders> <MaxAgeInSeconds>200</MaxAgeInSeconds> </CorsRule>
3 Réponses :
Permettez-moi d'essayer de répondre à votre question. Comme vous le savez, Venir maintenant aux options sur la mise en place de règles de CORS, il y a quelques façons que vous pouvez y parvenir. Si vous êtes intéressé par la configuration de manière programmatique, vous pouvez écrire un code qui consomme l'API de repos ou vous pouvez utiliser directement la bibliothèque client de stockage .NET. Vous pouvez simplement créer une application de console, placer le code et exécuter cela pour définir la règle Cors. Si vous recherchez des outils pour le faire, vous pouvez essayer l'un des outils suivants: P>
Azure stockage code>
offre une API de repos pour la gestion des contenus de stockage. Une opération il y a Définir les propriétés de service blob code> A> Et une des choses que vous faites présente des règles de gestion des CORS pour le service BLOB. Le XML que vous avez inclus dans la question est la charge utile de la demande de cette opération. Le code C # que vous avez mentionné est en réalité une bibliothèque client de stockage qui est essentiellement un wrapper sur cette API de repos écrit dans .NET. Ainsi, lorsque vous utilisez le code ci-dessus, il appelle réellement l'API de repos et envoie le XML. P>
Merci pour la réponse. J'ai mis le code C # dans l'événement global.asax Application_Start et essayez de définir la règle Cors pour un conteneur particulier. Mais lorsque j'ai essayé d'accéder à une URL particulière du navigateur, il téléchargait ce fichier, cela signifie que Cors Logic ne fonctionne pas. Pouvez-vous suggérer comment implémenter cela.
Je suis confus maintenant: p. Cors est utile lorsque vous souhaitez accéder ou invoquer l'API de repos à l'aide de JavaScript. Si je ne me trompe pas, vous êtes plus intéressé à restreindre l'accès au conteneur. Ai-je raison?
@ Gaurav Mantri: Oui .. tu m'as eu .. j'ai besoin de ce que tu dis exactement
Ce que vous devez faire, c'est changer le conteneur ACL en privé si vous ne voulez pas que quelqu'un d'autre télécharge directement le blob en tapant blob URL. Je crois que vous pouvez faire sur le portail lui-même.
Ouais. J'ai fait ça. Mais je veux obtenir des images blob de l'image Src. Si je le fais privé, ils ne sont pas accessibles. Peut-on avoir quelque chose comme permettre le stockage de blob pour la demande provenant d'un domaine particulier (mon webisite)?
Désolé de pousser cela, mais où puis-je ouvrir une console et entrer dans ces commandes
Les réponses ci-après répondent à la question qui a été posée dans le titre. Il semble que le questionneur savait déjà comment faire cela en grande partie de son code, mais voici ma réponse à cela. Malheureusement, les échantillons de code MS ont éteint ont été loin d'être faciles ou clairs, alors j'espère que cela aide quelqu'un d'autre. Dans cette solution, tout ce dont vous avez besoin est une instance // USAGE: P> cloudstorageaCcount code>, que vous pouvez appeler cette fonction à partir de (comme méthode d'extension).
CorsRule corsRule = new CorsRule() {
AllowedMethods = CorsHttpMethods.Get, // Gets or sets the HTTP methods permitted to execute for this origin
AllowedOrigins = { "*" }, // (IList<string>) Gets or sets domain names allowed via CORS.
//AllowedHeaders = { "*" }, // (IList<string>) Gets or sets headers allowed to be part of the CORS request
//ExposedHeaders = null, // (IList<string>) Gets or sets response headers that should be exposed to client via CORS
//MaxAgeInSeconds = 33333 // Gets or sets the length of time in seconds that a preflight response should be cached by browser
};
Ce n'est pas une bonne idée de donner accès au niveau de domaine à vos conteneurs. Vous pouvez faire le conteneur privé, télécharger les fichiers (Créez BLOB), puis partagez-la à l'aide de la stratégie d'accès partagée.
Le code ci-dessous peut vous aider. P>
static void Main(string[] args) { var account = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["AzureStorageAccount"].ConnectionString); var bClient = account.CreateCloudBlobClient(); var container = bClient.GetContainerReference("test-share-container-1"); container.CreateIfNotExists(); // clear all existing policy ClearPolicy(container); string newPolicy = "blobsharepolicy"; CreateSharedAccessPolicyForBlob(container, newPolicy); var bUri = BlobUriWithNewPolicy(container, newPolicy); Console.ReadLine(); } static void ClearPolicy(CloudBlobContainer container) { var perms = container.GetPermissions(); perms.SharedAccessPolicies.Clear(); container.SetPermissions(perms); } static string BlobUriWithNewPolicy(CloudBlobContainer container, string policyName) { var blob = container.GetBlockBlobReference("testfile1.txt"); string blobContent = "Hello there !!"; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(blobContent)); ms.Position = 0; using (ms) { blob.UploadFromStream(ms); } return blob.Uri + blob.GetSharedAccessSignature(null, policyName); } static void CreateSharedAccessPolicyForBlob(CloudBlobContainer container, string policyName) { SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy() { SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24), Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Read }; var permissions = container.GetPermissions(); permissions.SharedAccessPolicies.Add(policyName, sharedPolicy); container.SetPermissions(permissions); } <connectionStrings> <add name="AzureStorageAccount" connectionString="DefaultEndpointsProtocol=https;AccountName=[name];AccountKey=[key]" /> </connectionStrings>