Azure Blob 400 Bad request sur la Création de conteneur
Je suis l'élaboration d'un ASP.Net MVC 4 app et je suis en utilisant Azure Blob pour stocker les images que mes utilisateurs vont à télécharger. J'ai le code suivant:
var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString);
var blobStorage = storageAccount.CreateCloudBlobClient();
//merchantKey is just a GUID that is asociated with the merchant
var containerName = ("ImageAds-" + merchant.merchantKey.ToString()).ToLower();
CloudBlobContainer container = blobStorage.GetContainerReference(containerName);
if (container.CreateIfNotExist())
{
//Upload the file
}
dès que l'instruction if est excecuted je suis l'exception suivante:
{"The remote server returned an error: (400) Bad Request."}
Je pensais que c'était le conteneur de nom mais je ne vois rien de mal à cela. La chaîne de connexion semble créer un bon stockage avec tous les détails pour la goutte. Je suis à une perte. J'ai fait des recherches sur le web et tout le monde dit que c'est un problème de nom, mais je ne peux pas trouver quelque chose de mal avec elle.
Conteneur de Test de nom que j'ai utilisé: imageads-57905553-8585-4d7c-8270-be9e611eda81
Le Conteneur a l'uri suivante: {http://127.0.0.1:10000/devstoreaccount1/imageads-57905553-8585-4d7c-8270-be9e611eda81}
Mise à JOUR:
J'ai changé le nom de conteneur à juste image
et je reçois toujours la même exception. aussi le développement de la chaîne de connexion est la suivante: <add name="StorageConnection" connectionString="UseDevelopmentStorage=true" />
Vous devez vous connecter pour publier un commentaire.
Que vous les avez trouvés par l'intermédiaire de votre recherche, le problème est que le nom.
Vous dire que votre conteneur de test est nommé
imageads-57905553-8585-4d7c-8270-be9e611eda81
, mais dans votre code que vous utilisezImageAds-57905553-8585-4d7c-8270-be9e611eda81
. Notez la différence dans la capitalisation. Si vous changez votre nom de conteneur à tous les cas qu'il fonctionne correctement.Pour plus d'informations, voir #3, sous les Conteneur des Noms de Nommage et de Référencement des Conteneurs, les taches, et les Métadonnées:
.ToLower()
à la fin de cette déclaration qui convertit l'ensemble de la chaîne de caractères en minuscules. Dans les deux cas, j'ai pensé que peut-être que j'ai raté quelque chose et je suis une tête et a changé le nom de la statiqueimage
et j'ai eu la même exception.Étendre sur @kwill réponse, j'ai mis en place une solution pour convertir une chaîne en un conteneur acceptable nom, basé sur Azure règles pour le conteneur de nommage:
Ensuite, lorsque vous essayez d'obtenir le conteneur, il faut la nettoyer d'abord:
Fait, j'ai fini par trouver le problème.
Mon problème a été que la goutte émulateur de stockage ne serait pas démarrer (les autres émulateurs serait de commencer et j'ai raté le blob). Le problème a fini par être que le port 10000 (par défaut blob émulateur de port) était déjà utilisé par un autre logiciel. J'ai utilisé
Netstat
cmd outil pour voir les logiciels qui il était, il l'a tuée et son maintenant comme un charme!!! Merci à tous!!netstat help
j'ai trouvé et utilisénetstat -b -n
et qu'il figure à l'article que j'ai pu fermer dans le gestionnaire des tâches.Assurez-vous que vos versions de stockage des bibliothèques et de l'émulateur de stockage ne sont pas "out of sync". J'ai mis à jour mon bibliothèques, mais n'a pas de mise à jour de l'émulateur pour la dernière version et a obtenu cette situation exacte.
Si vous avez viens de mettre à jour la WindowsAzure.Stockage package nuget et votre application a commencé à s'écraser avec erreur http 400 bad request :
Dans mon cas, c'est arrivé lorsque j'ai mis à jour pour 8.2.1 et mon émulateur en était à la version 5.1.
Ma solution est: est-ce
Quand j'ai téléchargé l'Émulateur de Stockage 5.2 et mis à niveau à partir 5.1 les erreurs arrêté.
Une erreur s'est produite plusieurs fois pour moi déjà.
Mon humble demande si quelqu'un à partir de Microsoft Azure Émulateur de Stockage de l'équipe lit ce - S'il vous plaît ajouter une case pour le développement de la mode et de lancer une véritable exception avec le message comme - "Vous avez Azure Émulateur de Stockage de la version X. Y. Z installé. Pour utiliser le courant WindowsAzure.De stockage de la bibliothèque **V. V. V avec Azure Émulateur, vous devez installer la version Z. Z. Z de l'émulateur à partir de ce lien".** ou tout ce que vous jugerez utiles.
Ce genre de problème ont perdu plusieurs heures de mon temps, et je suppose que la même chose s'est produite à des milliers de développeurs à travers le monde et toujours cette exception se trouve là depuis plus de 4 ans!
J'ai juste eu ce problème et résolu.
Mon nom de conteneur était bien, mais j'ai accidentellement avait le AccountName paramètre dans ma chaîne de connexion capitalisés. Cela a conduit à mon 400.
Le mien était un stupide problème de nom de! Apparemment nous sommes pas permis à utiliser majuscules dans les noms.
Je viens de changer cela:
À
De l'expérimentation, il semble que le conteneur noms doivent aussi toujours être en minuscules. Il doit y avoir une conversion implicite en interne, ce qui le fait à l'origine de blob en minuscules, mais pas quand il la compare à createifnotexists(async). Mais quand il s'agit de re-créer, c'réduction du nombre de cas à nouveau, ce qui provoque un conflit. C'est une meilleure estimation.
J'ai rencontré cette erreur après la mise à jour des paquets, mais pas mon code. Mon problème est que la chaîne de connexion de format et de contenu a changé depuis que j'ai commencé à utiliser le Stockage Azure il y a plusieurs années. Assurez-vous de mettre à jour votre chaîne de connexion de manière appropriée de les clés d'accès à des options dans le portail azure.
Dans mon cas: j'ai été absent dans ma chaîne de connexion:
EndpointSuffix=core.windows.net
J'ai essayé de reproduire votre problème, mais il semble que vous utilisez une ancienne version de la bibliothèque cliente, depuis
container.CreateIfNotExist()
est maintenantcontainer.CreateIfNotExists()
. Avez-vous envisagé la mise à niveau de la dernière version du client (2.1)?il est nécessaire d'afficher le httpstatusmessage exception:
dans mon cas, l'erreur a été parce que
L'URI de la requête ne constituent pas une ressource sur le serveur.
donc, j'ai vu que mon
BlobContainerName
ne contient pas le droit de conteneur (ou n'existe pas)d'autres cas que j'ai vu, c'est le faux nom de conteneur. blobcontainername que doit être un nom comme "mycontainer1" ou "mycontainer2" et ainsi de suite
ici le code pour ajouter conteneur
La solution simple à ce problème est, conteneur doit toujours être en minuscules. J'ai eu le même problème qui a été résolu après changement de nom de conteneur pour tous en minuscules.