asp.net mvc 4 - कंटेनर के निर्माण पर Azure Blob 400 खराब अनुरोध



asp.net-mvc-4 azure-storage (7)

मैं एक एएसपी.NET एमवीसी 4 ऐप विकसित कर रहा हूं और मैं उन छवियों को स्टोर करने के लिए एज़ूर ब्लॉब का उपयोग कर रहा हूं जो मेरे उपयोगकर्ता अपलोड करने जा रहे हैं। मेरे पास निम्न कोड है:

 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
    } 

जैसे ही अगर कथन का बहिष्करण किया जाता है तो मुझे निम्नलिखित अपवाद मिल रहा है:

  {"The remote server returned an error: (400) Bad Request."}

मैंने सोचा कि यह कंटेनर का नाम था लेकिन मुझे इसके साथ कुछ भी गलत नहीं दिख रहा है। कनेक्शन स्ट्रिंग ब्लॉब के लिए सभी विवरणों के साथ एक अच्छा भंडारण बनाने लगती है। मुझे हानि हो रही है। मैंने वेब पर शोध किया है और हर कोई कह रहा है कि यह एक नामकरण समस्या है लेकिन मुझे इसके साथ कुछ भी गलत नहीं मिल रहा है।

टेस्ट कंटेनर नाम जिसका मैंने उपयोग किया: imageads-57905553-8585-4d7c-8270-be9e611eda81

कंटेनर में निम्नलिखित यूरी है: {http://127.0.0.1:10000/devstoreaccount1/imageads-57905553-8585-4d7c-8270-be9e611eda81}

अद्यतन: मैंने कंटेनर नाम को सिर्फ image बदल दिया है और मुझे अभी भी एक ही अपवाद मिलता है। विकास कनेक्शन स्ट्रिंग भी निम्नानुसार है: <add name="StorageConnection" connectionString="UseDevelopmentStorage=true" />

https://src-bin.com


Answer #1

@ केविल के जवाब पर विस्तार करने के लिए, मैंने कंटेनर नामकरण के लिए Azure के नियमों के आधार पर किसी भी स्ट्रिंग को एक स्वीकार्य कंटेनर नाम में बदलने के लिए एक समाधान लागू किया:

public static string ToURLSlug(this string s)
{
    return Regex.Replace(s, @"[^a-z0-9]+", "-", RegexOptions.IgnoreCase)
        .Trim(new char[] { '-' })
        .ToLower();
}

फिर, जब आप कंटेनर प्राप्त करने का प्रयास करते हैं, तो इसे पहले साफ़ करें:

CloudBlobContainer container = blobClient.GetContainerReference(bucket.ToURLSlug());

Answer #2

जैसा कि आपने अपने शोध के माध्यम से पाया, समस्या नाम है।

आप कहते हैं कि आपके टेस्ट कंटेनर को imageads-57905553-8585-4d7c-8270-be9e611eda81 नाम दिया गया है, लेकिन आपके कोड में आप ImageAds-57905553-8585-4d7c-8270-be9e611eda81 का उपयोग कर रहे हैं। पूंजीकरण में अंतर पर ध्यान दें। यदि आप अपने कंटेनर नाम को सभी निचले मामले में स्विच करते हैं तो यह सही तरीके से काम करेगा।


अधिक जानकारी के लिए, नामकरण और संदर्भ कंटेनर, ब्लॉब्स, और मेटाडाटा में कंटेनर नामों के तहत # 3 देखें:

3. कंटेनर नाम में सभी अक्षरों को लोअरकेस होना चाहिए।

Answer #3

मुझे बस यह मुद्दा था और इसे ठीक कर दिया।

मेरा कंटेनर नाम ठीक था, लेकिन मुझे गलती से मेरे कनेक्शन स्ट्रिंग कैपिटलकृत में खाता नाम पैरामीटर था। इससे मेरा 400 हो गया।


Answer #4

मेरा एक बेवकूफ नामकरण समस्या थी! स्पष्ट रूप से हमें नामों में अपरकेस का उपयोग करने की अनुमति नहीं है

मैंने अभी इसे बदल दिया है:

CloudBlobContainer container = blobClient.GetContainerReference("MyContainer");
container.CreateIfNotExists();

सेवा मेरे

CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
container.CreateIfNotExists();

Answer #5

मैंने आपकी समस्या को पुन: उत्पन्न करने का प्रयास किया, लेकिन ऐसा लगता है कि आप क्लाइंट लाइब्रेरी के पुराने संस्करण का उपयोग कर रहे हैं, क्योंकि container.CreateIfNotExist()container.CreateIfNotExists() अब container.CreateIfNotExists()container.CreateIfNotExists() । क्या आपने नवीनतम क्लाइंट संस्करण (2.1) को अपग्रेड करने पर विचार किया है?


Answer #6

यदि आपने अभी WindowsAzure.Storage nuget पैकेज को अपडेट किया है और आपका ऐप http त्रुटि 400 खराब अनुरोध के साथ क्रैश करना प्रारंभ कर दिया है:

मेरे मामले में यह हुआ जब मैंने 8.2.1 पर अपडेट किया और मेरा स्थानीय एमुलेटर संस्करण 5.1 था।

मेरा समाधान यह है:

  1. here. माइक्रोसॉफ्ट एज़ूर एसडीके पेज पर जाएं here.
  2. "एज़ूर स्टोरेज एमुलेटर" के लिए खोजें और नवीनतम स्टोरेज एमुलेटर डाउनलोड करें। आम तौर पर पृष्ठ के मध्य में बाईं ओर बाईं ओर "कमांड लाइन उपकरण" खंड में
  3. नवीनतम एमुलेटर स्थापित करें
  4. तुम तैयार हो।

जब मैंने स्टोरेज एमुलेटर 5.2 डाउनलोड किया और 5.1 से अपग्रेड किया तो त्रुटियां रुक गईं। इस तरह की एक त्रुटि पहले से ही मेरे लिए कई बार हुई।

मेरा विनम्र अनुरोध अगर माइक्रोसॉफ्ट एज़ूर स्टोरेज एमुलेटर टीम से कोई भी इसे पढ़ता है - कृपया विकास मोड के लिए एक चेक जोड़ें और संदेश के साथ एक सार्थक अपवाद फेंक दें - "आपके पास Azure स्टोरेज एमुलेटर संस्करण XYZ स्थापित है। वर्तमान WindowsAzure.Storage का उपयोग करने के लिए पुस्तकालय ** एज़ूर एमुलेटर के साथ वीवीवी आपको इस लिंक से एमुलेटर के संस्करण ZZZ को स्थापित करने की आवश्यकता है "। ** या जो भी आप उपयोगी मानते हैं।

इस तरह की समस्या ने मेरे समय के कई घंटे बर्बाद कर दिए हैं और मुझे लगता है कि यह दुनिया भर के हजारों डेवलपर्स के साथ हुआ और अभी भी यह अपवाद वहां बैठता है - 4 से अधिक वर्षों के लिए!


Answer #7

सुनिश्चित करें कि स्टोरेज लाइब्रेरीज़ और स्टोरेज एमुलेटर के आपके संस्करण "सिंक से बाहर नहीं हैं"। मैंने अपने पुस्तकालयों को अपडेट किया लेकिन एमुलेटर को नवीनतम संस्करण में अपडेट नहीं किया और यह सटीक स्थिति मिली।





blobstorage