Ćwiczenie — utrwalanie danych z projektu .NET Aspire przy użyciu usług baz danych

Ukończone

W tym ćwiczeniu zastąpisz bieżące magazyny danych dla firmowej aplikacji natywnej dla chmury. W tej chwili aplikacja używa lokalnej bazy danych SQLite do danych katalogu oraz pamięci podręcznej Redis do koszyków zakupowych klientów. Zastępujesz istniejące magazyny danych bazami danych PostgreSQL i MongoDB.

Instalowanie wymagań wstępnych

Wymagania wstępne dotyczące platformy .NET Aspire są następujące:

  • .NET 8
  • Visual Studio 2022 (wersja zapoznawcza)
  • Docker Desktop lub Podman
  • Obciążenie .NET Aspire w programie Visual Studio

Jeśli masz już zainstalowane wymagania wstępne, możesz przejść do klonowania istniejącej aplikacji.

Instalowanie platformy .NET 8

Postępuj zgodnie z tym linkiem .NET 8 i wybierz prawidłowy instalator dla systemu operacyjnego. Jeśli na przykład używasz systemu Windows 11 i nowoczesnego procesora, wybierz zestaw SDK platformy .NET 8 x64 dla systemu Windows.

Po zakończeniu pobierania uruchom instalatora i postępuj zgodnie z instrukcjami. W oknie terminalu uruchom następujące polecenie, aby sprawdzić, czy instalacja zakończyła się pomyślnie:

dotnet --version

Powinien zostać wyświetlony numer wersji zainstalowanego zestawu .NET SDK. Na przykład:

8.0.300-preview.24203.14

Instalowanie programu Visual Studio 2022 (wersja zapoznawcza)

Postępuj zgodnie z tym linkiem Visual Studio 2022 Preview i wybierz Pobierz wersję zapoznawczą. Po zakończeniu pobierania uruchom instalatora i postępuj zgodnie z instrukcjami.

Instalowanie programu Docker Desktop

Postępuj zgodnie z tym linkiem docker Desktop i wybierz prawidłowy instalator dla systemu operacyjnego. Po zakończeniu pobierania uruchom instalatora i postępuj zgodnie z instrukcjami.

Otwórz aplikację docker Desktop i zaakceptuj umowę serwisową.

Instalowanie obciążenia platformy .NET Aspire w programie Visual Studio

Zainstaluj obciążenie platformy .NET Aspire przy użyciu interfejsu wiersza polecenia platformy .NET:

  1. Otwórz terminal.

  2. Zainstaluj obciążenia platformy .NET Aspire przy użyciu następujących poleceń:

    dotnet workload update
    dotnet workload install aspire
    dotnet workload list
    

    Powinny zostać wyświetlone szczegóły obciążenia platformy .NET Aspire.

     Installed Workload Id      Manifest Version      Installation Source
    ---------------------------------------------------------------------------------------------
    aspire                     8.0.0/8.0.100         SDK 8.0.300-preview.24203, VS 17.10.34902.84
    
    Use `dotnet workload search` to find additional workloads to install.
    

Klonowanie i modyfikowanie aplikacji Góry Północne

Użyjmy git, aby uzyskać aktualną aplikację Northern Mountains.

  1. W wierszu polecenia przejdź do wybranego folderu, w którym możesz pracować z kodem.

  2. Wykonaj następujące polecenie, aby sklonować przykładową aplikację Northern Mountains eShop:

    git clone -b aspire-databases https://github.com/MicrosoftDocs/mslearn-aspire-starter
    
  3. Uruchom program Visual Studio, a następnie wybierz pozycję Otwórz projekt lub rozwiązanie.

  4. Przejdź do folderu, w którym sklonowano eShop, wejdź do folderu start i wybierz plik eShop.databases.sln, a następnie wybierz Otwórz.

  5. W eksploratorze rozwiązań rozwiń projekt eShop.AppHost, a następnie otwórz Program.cs.

    // Databases
    
    var basketStore = builder.AddRedis("BasketStore").WithRedisCommander();
    
    // Identity Providers
    
    var idp = builder.AddKeycloakContainer("idp", tag: "23.0")
        .ImportRealms("../Keycloak/data/import");
    
    // DB Manager Apps
    
    builder.AddProject<Projects.Catalog_Data_Manager>("catalog-db-mgr");
    
    // API Apps
    
    var catalogApi = builder.AddProject<Projects.Catalog_API>("catalog-api");
    
    var basketApi = builder.AddProject<Projects.Basket_API>("basket-api")
            .WithReference(basketStore)
            .WithReference(idp);
    
    // Apps
    
    // Force HTTPS profile for web app (required for OIDC operations)
    var webApp = builder.AddProject<Projects.WebApp>("webapp")
        .WithReference(catalogApi)
        .WithReference(basketApi)
        .WithReference(idp, env: "Identity__ClientSecret");
    

    Poprzedni kod przedstawia bieżącą konfigurację aplikacji. Aplikacja używa pamięci podręcznej Redis do przechowywania koszyka.

  6. Zapoznaj się z resztą aplikacji, skoncentruj się na projektach Catalog.Data.Manager i Catalog.API oraz zobacz, jak używają lokalnie przechowywanej bazy danych SQLite.

  7. Aby uruchomić aplikację, naciśnij F5 lub wybierz pozycję Debugowanie > Rozpocznij debugowanie.

  8. Jeśli zostanie wyświetlone okno dialogowe Start Docker Desktop, wybierz Tak.

  9. Po wyświetleniu pulpitu nawigacyjnego eShop .NET Aspire dla zasobu aplikacji internetowej wybierz bezpieczny punkt końcowy:

    Zrzut ekranu przedstawiający pulpit nawigacyjny eShop .NET Aspire. Punkt końcowy aplikacji internetowej jest wyróżniony.

  10. Aplikacja zostanie otwarta w przeglądarce. Możesz eksplorować aplikację i zobaczyć, jak działa.

    Zrzut ekranu przedstawiający stronę główną eShop.

    Poświadczenia użytkownika testowego są test@example.com i P@$$w0rd1.

  11. Aby zatrzymać debugowanie, naciśnij Shift+F5lub wybierz pozycję Debugowanie > Zatrzymaj debugowanie.

Dodawanie składnika .NET Aspire PostgreSQL

Zespół odpowiedzialny za mikrousługi katalogu utworzył aplikację do korzystania z lokalnie przechowywanej bazy danych SQLite. Takie podejście jest odpowiednie do programowania, ale zespół chce użyć bardziej niezawodnej bazy danych do produkcji.

Dwa projekty łączą się z bazą danych SQLite, projektami Catalog.Data.Manager i Catalog.API. Menedżer danych jest używany tylko do inicjalizacji bazy danych danymi, dlatego należy skoncentrować się na projekcie Catalog.API.

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt Catalog.API, wybierz pozycję Dodaj pakiet .NET Aspire>.

  2. W polu wyszukiwania dodaj na końcu Npgsql.EntityFramework i naciśnij Enter.

  3. Po lewej stronie w wynikach wybierz pozycję Aspire.Npgsql.EntityFrameworkCore.PostgreSQL.

  4. Po prawej stronie wybierz listę rozwijaną wersji, a następnie wybierz najnowszą wersję 8.0.0.

  5. Wybierz pozycję Zainstaluj.

  6. Jeśli zostanie wyświetlone okno dialogowe Podgląd zmian, wybierz opcję Zastosuj.

  7. W oknie dialogowym akceptacji licencji wybierz pozycję Akceptuję.

  8. W eksploratorze rozwiązań wybierz projekt Catalog.API, aby wyświetlić zawartość pliku Catalog.API.csproj.

  9. Usuń PackageReference dla Microsoft.EntityFrameworkCore.Sqlite:

    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.3" />
    

Rejestrowanie nowej bazy danych PostgreSQL DbContext

  1. W eksploratorze rozwiązań rozwiń projekt Catalog.API, a następnie otwórz plik Program.cs.

  2. Zamień SQLite DbContext:

    builder.Services.AddDbContext<CatalogDbContext>(
         options => options.UseSqlite(builder.Configuration.GetConnectionString("sqlconnection")
     	    ?? throw new InvalidOperationException(
     		    "Connection string 'sqlconnection' not found.")));
    

    Dzięki nowej bazie danych PostgreSQL DbContext:

    builder.AddNpgsqlDbContext<CatalogDbContext>("CatalogDB");
    

    Aplikacja nie musi już odczytywać pliku Database.db, więc usuń skojarzone ciągi w appsettings.json.

  3. W eksploratorze rozwiązań w obszarze Catalog.APIwybierz pozycję appsettings.json.

  4. Usuń wpisy ConnectionStrings, plik wygląda teraz następująco:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "OpenApi": {
        "Endpoint": {
          "Name": "Catalog.API v1"
        },
        "Document": {
          "Description": "The Catalog Microservice HTTP API. This is a Data-Driven/CRUD microservice sample",
          "Title": "eShop - Catalog HTTP API",
          "Version": "v1"
        }
      },
      "CatalogOptions": {
        "PicBasePathFormat": "items/{0}/pic/"
      }
    }
    
    
  5. Kliknij prawym przyciskiem myszy projekt Catalog.Data.Manager, a następnie wybierz Usuń.

  6. W oknie dialogowym wybierz pozycję OK.

Zespół bazy danych tworzy dla Ciebie kopię zapasową bazy danych PostgreSQL, którą możesz wykorzystać do stworzenia i zasiania bazy danych katalogu. Kopię zapasową można wyświetlić w folderze Catalog.API/Seed.

Zasiewanie bazy danych PostgreSQL przy użyciu woluminu powiązanego

Projekt AppHost może utworzyć kontener bazy danych PostgreSQL, załadować go danymi z powiązanego woluminu, a następnie za pomocą iniekcji zależności przekazać referencje do Catalog.API.

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt eShop.AppHost, wybierz opcję Dodaj pakiet .NET Aspire>.

  2. W polu wyszukiwania dodaj PostgreSQL i naciśnij Enter.

  3. Po lewej stronie w wynikach wybierz pozycję Aspire.Hosting.PostgreSQL.

  4. Po prawej stronie wybierz listę rozwijaną wersji, a następnie wybierz najnowszą wersję 8.0.0.

  5. Wybierz pozycję Zainstaluj.

  6. Jeśli zostanie wyświetlone okno dialogowe Podgląd zmian, wybierz Zastosuj.

  7. W oknie dialogowym akceptacji licencji wybierz pozycję Akceptuję.

  8. W eksploratorze rozwiązań rozwiń projekt eShop.AppHost, a następnie otwórz plik Program.cs.

  9. W obszarze komentarza //Databases dodaj następujący kod:

    // Databases
    
    var basketStore = builder.AddRedis("BasketStore").WithRedisCommander();
    var postgres = builder.AddPostgres("postgres")
        .WithEnvironment("POSTGRES_DB", "CatalogDB")
        .WithBindMount("../Catalog.API/Seed", "/docker-entrypoint-initdb.d").WithPgAdmin();
    var catalogDB = postgres.AddDatabase("CatalogDB");
    

    Poprzedni kod tworzy kontener bazy danych PostgreSQL, dodaje bazę danych o nazwie CatalogDBi wiąże katalog /docker-entrypoint-initdb.d z katalogiem ../Catalog.API/Seed. Kod tworzy również kontener dla narzędzia pgAdmin, który umożliwia zarządzanie bazą danych PostgreSQL.

  10. Przekaż odwołanie catalogDB do projektu Catalog.API, kod jest teraz po dodaniu .WithReference(catalogDB):

    // API Apps
    
    var catalogApi = builder.AddProject<Projects.Catalog_API>("catalog-api")
      .WithReference(catalogDB); 
    
  11. Projekt Catalog.Data.Manager nie jest już potrzebny, dlatego usuń projekt z AppHost. Usuń ten kod:

    // DB Manager Apps
    
    builder.AddProject<Projects.Catalog_Data_Manager>("catalog-db-mgr");
    

Testowanie aplikacji

Korzystanie z platformy .NET Aspire umożliwiło zespołowi usunięcie całego projektu. Ponadto interfejs API wykazu wymaga tylko jednego wiersza kodu, aby dodać kontekst bazy danych PostgresSQL. Wstrzykiwanie zależności i wykrywanie usług z AppHosta oznacza, że nie są potrzebne żadne inne zmiany kodu, aby umożliwić interfejsowi API łączenie się z nową bazą danych.

  1. Skompiluj i uruchom aplikację, naciśnij F5lub wybierz pozycję Debugowanie > Rozpocznij debugowanie.

    Zrzut ekranu przedstawiający zaktualizowany pulpit nawigacyjny platformy .NET Aspire z wyróżnionymi dwoma nowymi kontenerami PostgreSQL.

    Na pulpicie nawigacyjnym znajdują się dwa nowe kontenery, które hostują serwer bazy danych PostgreSQL i narzędzie pgAdmin. Istnieje również zasób bazy danych PostgreSQL hostujący bazę danych CatalogDB.

  2. Użyj pgAdmin, aby nawiązać połączenie z bazą danych PostgreSQL i eksplorować dane. Wybierz punkt końcowy postgres pgadmin.

    Zrzut ekranu przedstawiający interfejs pgAdmin z wyróżnioną nawigacją do tabeli Catalog.

  3. Rozwiń Aspire instancje>bazy danych postgres>bazy danych>CatalogDB>schematy>katalog>tabele. Następnie kliknij prawym przyciskiem myszy tabelę katalogu , a następnie wybierz Widok/Edytuj dane>pierwszych 100 wierszy.

  4. Możesz zobaczyć dane załadowane przez AppHost.

    Zrzut ekranu interfejsu pgAdmin przedstawiający zwrócone wiersze z tabeli Catalog.

  5. Wybierz kartę zasobów eShop pulpitu nawigacyjnego w przeglądarce, a następnie wybierz punkt końcowy aplikacji internetowej .

  6. Aplikacja zostanie otwarta i działa tak jak poprzednio.

  7. Aby zatrzymać debugowanie, naciśnij Shift+F5lub wybierz pozycję Debugowanie > Zatrzymaj debugowanie.

Dodawanie składnika .NET Aspire MongoDB do aplikacji

Bieżąca aplikacja używa usługi Redis jako magazynu danych w pamięci dla koszyka zakupów klienta. Zespół chce użyć bardziej niezawodnego i trwałego magazynu danych dla koszyka. Zastąp pamięć podręczną Redis bazą danych MongoDB.

Zmienianie interfejsu Basket.API w celu używania bazy danych MongoDB

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt Basket.API, wybierz pozycję Dodaj, a następnie wybierz pozycję Dodaj pakiet .NET Aspire>.
  2. W polu wyszukiwania wprowadź MongoDB na końcu i naciśnij Enter .
  3. Wybierz Aspire.MongoDB.Driver, a następnie wybierz najnowszą wersję 8.0.0.
  4. Wybierz pozycję Zainstaluj.
  5. Jeśli zostanie wyświetlone okno dialogowe Podgląd zmian, wybierz Zastosuj.
  6. W oknie dialogowym akceptacji licencji wybierz pozycję Akceptuję. @

Utwórz sklep koszyka MongoDB

Mikrousługa koszyka używa HostingExtensions do zarządzania magazynem danych Redis. Zastąp magazyn danych Redis magazynem danych MongoDB.

  1. W eksploratorze rozwiązań rozwiń projekt Basket.API, a następnie folder Storage, a następnie wybierz plik RedisBasketStore.cs.

    Istnieją dwie metody asynchroniczne, GetBasketAsync i UpdateBasketAsync, które używają pamięci podręcznej Redis. Utwórzmy wersje MongoDB tych metod.

  2. W eksploratorze rozwiązań kliknij prawym przyciskiem myszy folder Storage, a następnie wybierz pozycję Dodaj klasę>.

  3. W dialogu Dodaj nowy element nazwij plik MongoBasketStore.cs, a następnie wybierz Dodaj.

  4. Zastąp kod w pliku MongoBasketStore.cs następującym kodem:

    using eShop.Basket.API.Models;
    using MongoDB.Driver;
    using MongoDB.Driver.Linq;
    
    namespace eShop.Basket.API.Storage;
    
    public class MongoBasketStore
    {
      private readonly IMongoCollection<CustomerBasket> _basketCollection;
    
      public MongoBasketStore(IMongoClient mongoClient)
      {
        // The database name needs to match the created database in the AppHost
        _basketCollection = mongoClient.GetDatabase("BasketDB").GetCollection<CustomerBasket>("basketitems");
      }
    
      public async Task<CustomerBasket?> GetBasketAsync(string customerId)
      {
        var filter = Builders<CustomerBasket>.Filter.Eq(r => r.BuyerId, customerId);
    
        return await _basketCollection.Find(filter).FirstOrDefaultAsync();
      }
    
      public async Task<CustomerBasket?> UpdateBasketAsync(CustomerBasket basket)
      {
        var filter = Builders<CustomerBasket>.Filter.Eq(r => r.BuyerId, basket.BuyerId);
    
        var result = await _basketCollection.ReplaceOneAsync(filter, basket, new ReplaceOptions { IsUpsert = true });
    
        return result.IsModifiedCountAvailable ? basket : null;
      }
    }
    

    Poprzedni kod tworzy klasę MongoBasketStore, która współpracuje z modelem CustomerBasket. Kolekcja obsługuje operacje CRUD dla koszyków zakupowych klientów w bazie danych MongoDB.

  5. W eksploratorze rozwiązań rozwiń Basket.API>Extensions , a następnie wybierz plik HostingExtensions.cs.

  6. Zastąp kod usługi Redis:

    builder.AddRedis("BasketStore");
    
    builder.Services.AddSingleton<RedisBasketStore>();
    

    Za pomocą kodu bazy danych MongoDB:

    builder.AddMongoDBClient("BasketDB");
    
    builder.Services.AddSingleton<MongoBasketStore>();
    
  7. W eksploratorze rozwiązań rozwiń folder Grpc, a następnie otwórz plik BasketService.cs.

  8. Zmień klasę, aby akceptowała MongoBasketStore, zastąp:

    public class BasketService(RedisBasketStore basketStore) : Basket.BasketBase
    

    Z:

    public class BasketService(MongoBasketStore basketStore) : Basket.BasketBase
    

Dodawanie bazy danych MongoDB do hosta AppHost

  1. W eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt eShop.AppHost, a następnie wybierz pozycję Dodaj pakiet aspirujący>.NET.

  2. W polu wyszukiwania , na końcu wprowadź MongoDB i naciśnij Enter.

  3. Wybierz pakiet Aspire.Hosting.MongoDB, a następnie wybierz najnowszą wersję 8.0.0.

  4. Wybierz pozycję Zainstaluj.

  5. Jeśli zostanie wyświetlone okno dialogowe Podgląd zmian, wybierz Zastosuj.

  6. W oknie dialogowym akceptacji licencji wybierz pozycję Akceptuję. @

  7. W eksploratorze rozwiązań rozwiń projekt eShop.AppHost, a następnie otwórz plik Program.cs.

  8. W sekcji Bazy danych dodaj składnik Bazy danych MongoDB:

    var mongo = builder.AddMongoDB("mongo")
      .WithMongoExpress()
      .AddDatabase("BasketDB");
    

    Poprzedni kod tworzy kontener bazy danych MongoDB, dodaje bazę danych o nazwie BasketDB. Kod tworzy również kontener dla narzędzia Mongo Express, który umożliwia zarządzanie bazą danych MongoDB.

  9. Usuń kontener Redis:

    var basketStore = builder.AddRedis("BasketStore").WithRedisCommander();
    

    Kod powinien teraz wyglądać następująco:

    // Databases
    
    var postgres = builder.AddPostgres("postgres")
        .WithEnvironment("POSTGRES_DB", "CatalogDB")
        .WithBindMount("../Catalog.API/Seed", "/docker-entrypoint-initdb.d")
        .WithPgAdmin();
    var catalogDB = postgres.AddDatabase("CatalogDB");
    
    var mongo = builder.AddMongoDB("mongo")
        .WithMongoExpress()
        .AddDatabase("BasketDB");
    
  10. Projekt Basket.API wymaga odwołania do nowej bazy danych MongoDB i należy usunąć odwołanie do bazy danych Redis:

    var basketApi = builder.AddProject<Projects.Basket_API>("basket-api")
            .WithReference(mongo)
            .WithReference(idp);
    

Projekt Basket.API jest teraz gotowy do użycia bazy danych MongoDB. Przetestujmy aplikację, aby sprawdzić, czy działa.

Testowanie aplikacji

  1. Skompiluj i uruchom aplikację, naciśnij F5lub wybierz pozycję Debugowanie > Rozpocznij debugowanie.

    Zrzut ekranu przedstawiający pulpit nawigacyjny platformy .NET Aspire z wyróżnionymi kontenerami bazy danych MongoDB.

    Na pulpicie nawigacyjnym można zobaczyć nowe kontenery bazy danych MongoDB— jeden dla serwera bazy danych drugi dla usługi Mongo Express. Istnieje również nowy zasób MongoDBDatabase, który hostuje bazę danych BasketDB.

  2. Wybierz punkt końcowy aplikacji internetowej .

  3. Aby zalogować się przy użyciu poświadczeń użytkownika testowego, wybierz ikonę użytkownika w prawym górnym rogu. Wiadomość e-mail jest test@example.com, a hasło to P@$$w0rd1.

  4. Wybierz Zegarek GPS Adventurer ze strony głównej.

  5. Wybierz opcję Dodaj do koszyka, powinien zostać wyświetlony komunikat o błędzie:

    Zrzut ekranu przedstawiający wyjątek RpcException.

Debugowanie aplikacji

Aplikacja zgłasza wyjątek podczas próby dodania elementu do koszyka zakupów. Możesz użyć pulpitu nawigacyjnego, aby ułatwić debugowanie problemu.

  1. W przeglądarce wybierz kartę pulpitu nawigacyjnego zasobów eShop.

    Zrzut ekranu pulpitu nawigacyjnego, błędy w Basket.API i aplikacji internetowej są wyróżnione.

    Na panelu wyświetlane są błędy w API koszyka i webapp. Przejrzyj dzienniki dla basket-api.

  2. W przypadku zasobu basket-api, w kolumnie dzienników, wybierz pozycję Wyświetl.

    Zrzut ekranu przedstawiający dzienniki usługi koszyk-api.

    Istnieje wyjątek:

    System.FormatException: Element '_id' does not match any field or property of class eShop.Basket.API.Models.CustomerBasket.
    
  3. Wybierz element menu Resources, a następnie wybierz punkt końcowy mongo-mongoexpress.

  4. W sekcji Databases, obok BasketDB, wybierz View.

  5. W Collections, obok elementy koszyka, wybierz Wyświetl.

    Zrzut ekranu Mongo Express przedstawiający dane przechowywane w kolekcji basketitems.

    Dokumenty przechowywane w bazie danych MongoDB mają pole _id. Każdy dokument przechowywany w kolekcji bazy danych MongoDB musi mieć unikatowe pole _id.

  6. Aby zatrzymać debugowanie, naciśnij Shift+F5lub wybierz pozycję Debugowanie > Zatrzymaj debugowanie.

Przejrzyj kod i rozwiąż problem

Przyjrzyjmy się CustomerBasketi zobaczymy, czy uda nam się znaleźć problem.

  1. W eksploratorze rozwiązań rozwiń folder Basket.API>Models, a następnie otwórz plik CustomerBasket.cs.

    public class CustomerBasket
    {
        public required string BuyerId { get; set; }
    
        public List<BasketItem> Items { get; set; } = [];
    }
    

    Model CustomerBasket nie ma pola ani właściwości zgodnej z polem _id. Platforma Entity Framework próbuje mapować pole _id na model CustomerBasket i nie może odnaleźć dopasowania.

  2. Zaktualizuj model CustomerBasket, aby zawierał pole _id:

    public class CustomerBasket
    {
        /// <summary>
        /// MongoDB document identifier
        /// </summary>
        public string _id { get; set; } = "";
    
        public required string BuyerId { get; set; }
    
        public List<BasketItem> Items { get; set; } = [];
    }
    

Testowanie stałej aplikacji

  1. Aby skompilować i uruchomić aplikację, naciśnij F5lub wybierz pozycję Debuguj > Rozpocznij debugowanie.

  2. W aplikacji internetowej w kolumnie Endpoints kliknij prawym przyciskiem myszy adres URL, a następnie wybierz pozycję Otwórz link w oknie InPrivate.

    Użycie okna InPrivate gwarantuje, że przeglądarka nie używa poprzedniego pliku cookie sesji do uwierzytelniania.

  3. Aby zalogować się przy użyciu poświadczeń użytkownika testowego, wybierz ikonę użytkownika w prawym górnym rogu. Adres e-mail to test@example.com, a hasło to P@$$w0rd1.

  4. Wybierz Zegarek GPS Adventurer ze strony głównej.

  5. Wybierz pozycję Dodaj do torby na zakupy.

    Zrzut ekranu przedstawiający działający koszyk zakupów eShop.

    Funkcjonalność koszyka aplikacji Northern Mountains działa już.

Baza danych SQLite została pomyślnie zastąpiona bazą danych PostgreSQL i pamięcią podręczną Redis za pomocą bazy danych MongoDB. Użyto platformy .NET Aspire do zarządzania bazami danych i eksplorowania w nich danych oraz użyto pulpitu nawigacyjnego w celu debugowania problemu z aplikacją.