Oefening: een Azure-functie lokaal maken en testen met Visual Studio

Voltooid

Visual Studio biedt een uitstekende omgeving voor het maken en testen van een Azure Function-app. U kunt een Azure-functie lokaal ontwikkelen en controleren of deze correct werkt voordat u deze implementeert in de cloud.

In het scenario van de onlinewebsite van het luxe horloge is er een vereiste voor een functie die gedetailleerde informatie over een horloge retourneert wanneer het modelnummer van het horloge wordt gegeven. De gegevens die u nodig hebt, zijn onder andere: de fabrikant, het type kastdeksel (effen, transparant of gegraveerd), de bezel, de stijl van de wijzerplaat, de afwerking van de kast, het aantal uurwerkjuwelen, enzovoort.

In deze oefening implementeert en test u een versie van deze functie lokaal met behulp van Visual Studio.

Notitie

Voordat u aan deze oefening begint, moet Visual Studio 2022 zijn geïnstalleerd, samen met de web- en cloudworkloadextensies ASP.NET en webontwikkeling en Azure-ontwikkeling.

Een Azure-functie-app maken

Een Azure Function-app maken met behulp van een Azure Functions-sjabloon .

  1. Start Visual Studio Installer en selecteer Wijzigen op de startpagina van Visual Studio 2022.

  2. Zorg ervoor dat ASP.NET en webontwikkeling en Azure-ontwikkeling zijn geselecteerd en beschikbaar zijn (als u Installeren niet selecteert tijdens het downloaden) en selecteer vervolgens Sluiten.

    Schermopname van Visual Studio 2022 met asp dot net- en Azure-ontwikkelworkloads gemarkeerd.

  3. Selecteer Starten op de startpagina van Visual Studio 2022.

  4. Selecteer Een nieuw project maken in het menu Aan de slag. De pagina Een nieuw project maken wordt weergegeven.

  5. Zoek naar of blader naar Azure Functions-sjabloon en selecteer Volgende.

    Schermopname van Visual Studio 2022 Een nieuwe projectpagina maken met de Azure Functions-sjabloon gemarkeerd.

  6. De pagina Uw nieuwe project configureren wordt weergegeven. Voer de volgende waarden in.

    Veld Waarde
    Projectnaam WatchPortalFunction
    Plaats Selecteer een locatie om uw project op te slaan door naar een map te bladeren of door een map op uw lokale computer te maken.
    naam van oplossing WatchPortalFunction accepteren (standaard).
    Oplossing en project in dezelfde map plaatsen Uitgeschakeld (NIET geselecteerd). Deze instelling zorgt voor de juiste mapstructuur voor deze module.

    Schermopname van de pagina waar u uw nieuwe project configureert, met 'creëren' gemarkeerd.

  7. Selecteer Volgende.

  8. De pagina Aanvullende informatie wordt weergegeven.

  9. Selecteer de volgende waarden.

    Veld Waarde
    Dotnet-versie *.NET 6.0 (langetermijnondersteuning)
    Functietrigger Http-trigger
    Azurite gebruiken voor runtime-opslagaccount (AzureWebJobsStorage) Aangevinkt
    Docker inschakelen Ongecontroleerde
    Autorisatieniveau Anoniem

    Als in een Visual Studio-melding wordt weergegeven dat updates gereed zijn, selecteert u Vernieuwen.

  10. Klik op Maken.

    Schermopname van Azure Functions-triggers, met HTTP-trigger gemarkeerd.

    Visual Studio maakt het WatchPortalFunction project en geeft het broncodebestand van de Functions-app weer Function1.cs in het venster van de code-editor. Het bestand bevat de code voor een klasse met de naam Function1.

    Zoals wordt weergegeven in de volgende voorbeeldcode, bevat de Function1 klasse standaardcode van de HTTP-triggersjabloon. De methode Run wordt geannoteerd met het kenmerk [FunctionName ("Function1")]. In de vorige les hebben we geleerd dat de standaardparameters voor de methode Run een HttpRequest-object zijn met de details van de aanvraag die de functie heeft geactiveerd en een traceringslogboekvermelding voor het vastleggen van traceringsgegevens.

    namespace WatchPortalFunction
    {
        public static class Function1
        {
            [FunctionName("Function1")]
            public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
            {
                log.LogInformation("C# HTTP trigger function processed a request.");
    
                string name = req.Query["name"];
    
                string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
                dynamic data = JsonConvert.DeserializeObject(requestBody);
                name = name ?? data?.name;
    
                return name != null
                    ? (ActionResult)new OkObjectResult($"Hello, {name}")
                    : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
            }
        }
    }
    

De Azure-functie WatchInfo maken

  1. Selecteer Solution Explorer in het menu Beeld. Klik in het venster Solution Explorer met de rechtermuisknop op het Azure Functions-project WatchPortalFunction en selecteer in het contextmenuNieuwe Azure-functie>.

    Schermopname van het Solution Explorer-venster. De gebruiker heeft Add -> New Azure Function geselecteerd.

  2. Selecteer Azure Function in het venster Nieuw item toevoegen - WatchPortalFunction. Voer in het veld NaamWatchInfo.cs in en selecteer vervolgens Toevoegen.

    Schermopname van het venster Nieuw item toevoegen. De Azure Function-sjabloon is geselecteerd en de nieuwe functie heet WatchInfo.cs.

  3. Selecteer http-trigger in het venster New Azure Function - WatchInfo. Selecteer Anoniem in de vervolgkeuzelijst Autorisatieniveau en selecteer vervolgens Toevoegen.

    Schermopname van het venster Nieuwe Azure-functie. De HTTP-trigger met anonieme toegangsrechten is geselecteerd.

    Visual Studio maakt een nieuwe functie en de Run methode wordt geannoteerd met het kenmerk [FunctionName("WatchInfo")].

  4. Verwijder in de hoofdtekst van de functie Run de code na de log.LogInformation regel. Het resultaat moet er als volgt uitzien.

    namespace WatchPortalFunction
    {
        public static class WatchInfo
        {
            [FunctionName("WatchInfo")]
            public static async Task<IActionResult> Run(
                [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
                ILogger log)
            {
                log.LogInformation("C# HTTP trigger function processed a request.");
            }
        }
    }
    
  5. Voeg de volgende code in de hoofdtekst van de methode Run in na de regel log.LogInformation.

    // Retrieve the model id from the query string
    string model = req.Query["model"];
    
    // If the user specified a model id, find the details of the model of watch
    if (model != null)
    {
        // Use dummy data for this example
        dynamic watchinfo = new { Manufacturer = "abc", CaseType = "Solid", Bezel = "Titanium", Dial = "Roman", CaseFinish = "Silver", Jewels = 15 };
    
        return (ActionResult)new OkObjectResult($"Watch Details: {watchinfo.Manufacturer}, {watchinfo.CaseType}, {watchinfo.Bezel}, {watchinfo.Dial}, {watchinfo.CaseFinish}, {watchinfo.Jewels}");
    }
    return new BadRequestObjectResult("Please provide a watch model in the query string");
    

    Deze code leest de parameter model uit de querytekenreeks in de HTTP-aanvraag en retourneert de details voor dat horlogemodel. In deze voorbeeldcode hebben we dummy watchinfo gegevens gemaakt die worden geretourneerd, ongeacht de waarde van model. De functie retourneert een antwoord dat deze details bevat. Als de HTTP-aanvraag geen querytekenreeks bevat, retourneert de functie een foutbericht. In een praktijkvoorbeeld gebruikt u de model-waarde om de juiste watchinfo op te zoeken en terug te geven.

De Azure-functie lokaal testen

  1. Selecteer foutopsporing starten> op de opdrachtbalk.

    Visual Studio bouwt de Azure Function-app en start de Azure Functions-runtime. Er wordt een uitvoervenster geopend om berichten weer te geven wanneer de runtime wordt gestart. Wanneer de runtime gereed is, wordt een lijst met de HTTP-functies en de URL weergegeven die u kunt gebruiken om elke functie te activeren.

    Schermopname van het runtimevenster van Azure Functions. De runtime start de Azure Function-app en geeft de URL's weer voor de Azure Functions 'Function1' en 'WatchInfo'.

  2. Open een webbrowser en voer de URL in die wordt weergegeven in het runtimevenster. De standaard-URL is http://localhost:7071/api/WatchInfo?model=abc, dus dat is de URL die we in deze oefening gebruiken. De aanvraag activeert de WatchInfo functie en geeft het model abc door als de queryreeksparameter. In de webbrowser moeten de dummygegevens worden weergegeven die door de functie zijn gegenereerd.

    Schermopname van een webbrowser die de Azure-functie WatchInfo activeert. De functie retourneert de dummygegevens voor het model dat is opgegeven in de querytekenreeks van de opgegeven URL.

  3. Voer de URL http://localhost:7071/api/WatchInfoin. Deze aanvraag bevat geen querytekenreeks. De trigger retourneert het foutbericht en de webbrowser geeft het bericht weer Please provide a watch model in the query string.

  4. Sluit de webbrowser, maar laat de Azure Function-app actief.

  5. Stel in Visual Studio een onderbrekingspunt in op de coderegel waarmee het model wordt opgehaald uit de querytekenreeks.

    Schermopname van Visual Studio met een onderbrekingspunt in de instructie die het model uit de querytekenreeks leest.

  6. Start de webbrowser opnieuw en voer de URL in zonder de querytekenreeks http://localhost:7071/api/WatchInfo.

    Visual Studio markeert de code op het onderbrekingspunt waar de uitvoering is onderbroken.

  7. Druk in Visual Studio op F10 om de declaratie bij het breakpoint over te slaan.

  8. Controleer op het tabblad Automatisch van het foutopsporingsprogramma of de model variabele is null. De variabele geeft deze waarde weer omdat de queryreeks geen modelparameter bevat.

    Schermopname van visual Studio-foutopsporingsprogramma met de waarde van de modelvariabele.

  9. Druk nogmaals op F10 en controleer of het besturingselement naar de instructie springt die een BadRequestObjectResult object retourneert.

  10. Druk op F5 om door te gaan met het uitvoeren van de methode en terug te keren naar de webbrowser. Hetzelfde foutbericht moet worden weergegeven.

  11. Voer in de webbrowser de URL in met een querytekenreeks en een modelparameter. Doorloop de functie in het foutopsporingsprogramma en controleer of het model correct is opgehaald. De model variabele moet worden gevuld met de waarde van de parameter en de details van het model dat wordt geretourneerd als een OkObjectResult-object.

  12. Op de menubalk, selecteer Debug>Debugging stoppen.

In deze oefening hebt u gezien hoe de Azure Functions Tools-extensie in Visual Studio de ervaring van het maken van een Azure Function-app vereenvoudigt door vertrouwde hulpprogramma's te gebruiken om uw code te bouwen en fouten op te sporen.