Wprowadzenie do Azure Storage w języku C#
Azure Storage to podstawowa usługa oferowana przez Microsoft Azure, która w połączeniu z technologiami .NET staje się potężnym narzędziem do przechowywania i pobierania plików w chmurze. W swoim szczegółowym poradniku "Intro to Azure Storage in C#", Tim Corey przedstawia krok po kroku, jak skonfigurować konto Azure Storage Account, ustawić Azure Blob Storage i zintegrować je z projektem C# ASP.NET Core MVC.
W tym artykułe ściśle śledzimy wideo Tima, aby zbadać każdy etap procesu, omawiając najważniejsze pojęcia i terminologie używane w rzeczywistym rozwoju Azure.
Cennik i planowanie Azure Storage
Tim zaczyna od wyjaśnienia efektywności finansowej korzystania z Azure Storage w aplikacji C#. Bez względu na to, czy używasz kontenera blob do przechowywania plików tekstowych, obrazów, czy danych binarnych, koszt pozostaje minimalny. Wprowadza Azure Pricing Calculator, aby oszacować opłaty na podstawie wybranych funkcji, takich jak poziomy wydajności, ustawienia nadmiarowości i operacje na danych.
Tim wybiera Block Blob Storage w ramach General-purpose v2 w portalu Azure i konfiguruje gorący poziom dostępu dla plików często używanych. Upewnia się, że konto przechowywania korzysta z lokalnie nadmiarowego przechowywania (LRS), aby zminimalizować koszty przy jednoczesnym zachowaniu bezpieczeństwa.
"Dla aplikacji demo przechowującej 1 GB danych i kilku tysięcy operacji, koszt wynosi 13 centów miesięcznie," wyjaśnia Tim.
Tworzenie konta Azure Storage Account
W portalu Azure, Tim pokazuje, jak utworzyć nową grupę zasobów i odpowiednie konto Azure Storage Account. Konwencje nazw są ściśle określone — nazwy kont przechowywania muszą być unikalne, z małych liter i nie mogą zawierać myślników.
Podczas konfiguracji wyłącza przechowywanie nadmiarowe z georedundancją, aby zaoszczędzić na kosztach, co jest kluczową wskazówką dla deweloperów pracujących nad prototypami lub w lokalnych środowiskach. Włącza on również anonimowy dostęp na poziomie kontenera, ale tylko do celów demonstracyjnych — ostrzegając, że rzeczywiste środowiska produkcyjne wymagają zabezpieczonego dostępu.

Tim obejmuje również klucze dostępu, łańcuch połączenia i nazwę konta przechowywania — wszystko niezbędne, gdy projekt C# łączy się z zasobami Azure.
Zrozumienie Azure Blob Storage
Tim podkreśla, jak kontener blob jest używany do organizowania danych w koncie Azure Storage Account. Unika ręcznego tworzenia nowego kontenera poprzez portal i zamiast tego planuje wygenerowanie go w kodzie przy użyciu Azure SDK dla .NET.
Wyjaśnia, że bezpieczne klucze dostępu i łańcuch połączenia — widoczne w ustawieniach bezpieczeństwa konta — zostaną użyte w aplikacji do uwierzytelniania z biblioteką klienta przechowywania.
Rozpoczęcie projektu ASP.NET Core
Tim tworzy webową aplikację MVC w .NET 9 za pomocą Visual Studio. Chociaż można użyć dowolnego typu UI, takiego jak Razor Pages lub Blazor Server, wybiera on MVC do demonstracji.
O 19:35, w secrets.json, bezpiecznie przechowuje on wrażliwe dane uwierzytelniające:
-
connection string
-
klucz konta przechowywania
-
nazwa kontenera
- nazwa konta przechowywania

Tim wyjaśnia, że appsettings.json nie powinny zawierać tajemnic, ponieważ trafia on do repozytoriów kodu źródłowego. Zamiast tego, tajemnice powinny być przechowywane lokalnie przy użyciu User Secrets, szczególnie podczas rozwoju.
Instalacja wymagańych pakietów NuGet
Aby współpracować z Azure Blob Storage, Tim instaluje pakiet NuGet Azure.Storage.Blobs. Docenia, jak Microsoft zmodularyzował funkcje za pomocą Azure SDK, umożliwiając tworzenie mniejszych, łatwiejszych w utrzymaniu aplikacji.

"Zamiast pakować wszystko do frameworku, teraz dostajesz dokładnie to, czego potrzebujesz — jak bibliotekę klienta Azure Blob — poprzez NuGet," zauważa Tim.
Konfiguracja wzorca opcji dla Azure Storage
Następnie, Tim tworzy klasę POCO (BlobStorageOptions), aby dopasować klucze w konfiguracji. Używa wzorca opcji do wiązania konfiguracji z obiektami o silnym typowaniu, umożliwiając centralne i testowalne konfigurowanie.
Ta konfiguracja ułatwia aplikacji .NET używania konfiguracji Azure konsekwentnie w różnych środowiskach.
Implementacja logiki serwisu Blob Storage
Tim dodaje nowy folder o nazwie DataAccess i implementuje klasę o nazwie BlobStorage.cs. W środku wstrzykuje konfigurację używając IOptions
Buduje dwie główne metody asynchroniczne:
Logika przesyłania pliku
Metoda UploadFileAsync:
-
Akceptuje IFormFile z interfejsu MVC.
-
Tworzy BlobContainerClient z Azure Storage SDK używając łańcucha połączenia i nazwy kontenera.
-
Sprawdza, czy istnieje istniejący kontener, lub tworzy nowy kontener, jeśli nie istnieje.
-
Ustawia politykę dostępu na Brak, zapewniając, że kontener nie jest publicznie dostępny.
- Używa BlobClient, aby przesłać plik ze strumienia.
Tim używa instrukcji using i wywołania await, aby bezpiecznie obsługiwać strumień pliku, zapobiegając wyciekom pamięci.
Logika pobierania pliku
W DownloadFileAsync, Tim:
-
Akceptuje ciąg znaków nazwę pliku lub pełny URI bloba.
-
Tworzy nowy BlobClient używając URI i bezpiecznych danych uwierzytelniających.
-
Pobiera plik za pomocą DownloadStreamingAsync.
- Okłada strumień w FileContentResult, aby umożliwić pobrania z przeglądarki.
To zapewnia, że pliki pozostają bezpieczne i są dostępne tylko przez aplikację — nie bezpośrednio przez zgadywanie URL.
Rejestracja Blob Storage z Dependency Injection
Tim definiuje interfejs (IBlobStorage) dla swojej klasy i rejestruje go jako Singleton w kontenerze DI .NET. Ponieważ klasa jest bezstanowa i używa tylko wartości konfiguracji, Singleton jest optymalny.
Integracja z aplikacją MVC
Home Controller jest modyfikowany, aby korzystać z IBlobStorage. Zawiera:
-
Metodę POST UploadFile, która weryfikuje dane wejściowe i wywołuje UploadFileAsync.
- Metodę POST GetFile, która sprawdza URL i następnie wywołuje DownloadFileAsync.
Każda metoda współpracuje z klientem przechowywania, aby bezpiecznie obsługiwać pliki blob, czy to przesyłając, czy to pobierając.
Interfejs użytkownika Razor View dla operacji na plikach
W Index.cshtml, Tim konfiguruje:
-
Formularz do przesyłania plików za pomocą input type="file" i stylizacji Bootstrap.
-
Drugi formularz do pobierania pliku za pomocą jego URI.
-
Obsługę wiadomości o błędach dla przypadków brzegowych jak brakujące pliki czy nieprawidłowe URI.
- Sekcję wyświetlania, która pokazuje wygenerowany URI bloba (https) po pomyślnym przesłaniu.
Tim również obsługuje błędy przy użyciu List
Testowanie i weryfikacja bezpieczeństwa plików
Tim przesyła plik tekstowy i próbuje uzyskać dostęp do URI bezpośrednio w przeglądarce — nie udaje się, jak oczekiwano, ze względu na politykę dostępu Brak.
Po tymczasowej zmianie poziomu dostępu w portalu Azure, plik staje się do pobrania przez bezpośredni link. Jednak szybko przywraca go do poziomu Prywatny, podkreślając, jak Azure zapewnia szczegółową kontrolę nad bezpieczeństwem.
Końcowe zalecenia Tima
Tim kończy, przypominając programistom, że Microsoft Azure oferuje wiele wartości nawet przy minimalnych nakładach. Przy pomocy narzędzi takich jak:
-
Pakiety NuGet
-
Azure SDK
-
Visual Studio
-
Portal Azure
- Bezpieczne łańcuchy połączenia i klucze
można szybko zbudować rozwiązanie magazynowe gotowe do produkcji używając C#. Bez względu na to, czy pracujesz nad systemem o dużej skali, czy małym projektem testowym, Azure Blob Storage to skalowalny i opłacalny wybór.
"Płacisz za to, czego używasz w chmurze — więc pytaj tylko o to, czego potrzebujesz," podkreśla Tim.
Podsumowanie
Od tworzenia konta przechowywania i konfigurowania kontenerów blob, po bezpieczne obsługiwanie przesyłań i pobrań w aplikacji MVC, Tim Corey zapewnia szczegółowe instrukcje, które obejmują całe życie korzystania z Azure Storage z .NET.
Z tym przewodnikiem i filmikiem Tima, można zacząć korzystać z Azure Blob Storage z pełnym zaufaniem — utrzymując kontrolę, minimalizując koszty i przestrzegając najlepszych praktyk w rozwoju chmurowym.
Warto zapoznać się z jego pełnym filmikiem dla uzyskania dalszej jasności oraz odwiedzić jego Kanał YouTube dla większej ilości wglądu na temat przechowywania Azure (C#).
