Övning – Skapa och testa en enkel Azure-funktion lokalt med Visual Studio

Slutförd

Visual Studio är en utmärkt miljö för att skapa och testa en Azure-funktionsapp. Du kan utveckla en Azure-funktion lokalt och kontrollera att den fungerar korrekt innan du distribuerar den till molnet.

I scenariot med onlinewebbplatsen för lyxklockan finns det ett krav på en funktion som returnerar detaljerad information om en klocka när den ges klockans modellnummer. De data du behöver returnera inkluderar: tillverkaren, typen av fall tillbaka (solid, transparent eller graverad), ramen, stilen på urtavlan, efterbehandlingen av fallet, antalet juveler och så vidare.

I den här övningen implementerar och testar du en version av den här funktionen lokalt med hjälp av Visual Studio.

Kommentar

Innan du påbörjar den här övningen måste du se till att VS 2022 är installerat, tillsammans med webb- och molntilläggen för arbetsbelastningar ASP.NET och webbutveckling och Azure-utveckling.

Skapa en Azure-funktionsapp

Skapa en Azure-funktionsapp med hjälp av en Azure Functions-mall .

  1. Starta Visual Studio Installer och välj Ändrastartsidan för Visual Studio 2022.

  2. Se till att ASP.NET och webbutveckling och Azure-utveckling är valda och tillgängliga (om de inte väljer Installera när du laddar ned) och välj sedan Stäng.

    Skärmbild av Visual Studio 2022 med arbetsbelastningarna asp dot net och Azure Development markerat.

  3. På startsidan för Visual Studio 2022 väljer du Starta.

  4. På menyn Kom igång väljer du Skapa ett nytt projekt. Fönstret Create a new project (Skapa ett nytt projekt) visas.

  5. Sök efter eller bläddra till Azure Functions-mallen och välj sedan Nästa.

    Skärmbild av Visual Studio 2022 Skapa en ny projektsida med Azure Functions-mallen markerad.

  6. Sidan Configure your new project (Konfigurera ditt nya projekt) visas. Ange följande värden.

    Fält Värde
    Projektnamn WatchPortalFunction
    Plats Välj en plats för att lagra projektet genom att bläddra till en mapp eller skapa en mapp på den lokala datorn.
    Namn på lösning Acceptera WatchPortalFunction (standard).
    Placera lösningen och projektet i samma katalog Avmarkerat (INTE markerat). Den här inställningen säkerställer rätt mappstruktur för den här modulen.

    Skärmbild av Sidan Konfigurera det nya projektet med skapa markerat.

  7. Välj Nästa.

  8. Sidan Ytterligare information visas.

  9. Välj följande värden.

    Fält Värde
    Dotnet-version *.NET 6.0 (långsiktigt stöd)
    Funktionsutlösare Http-utlösare
    Använda Azurite för körningslagringskonto (AzureWebJobsStorage) Rutig
    Aktivera Docker Avmarkerat
    Auktoriseringsnivå Anonym

    Om ett Visual Studio-meddelande visar att uppdateringarna är klara väljer du Uppdatera.

  10. Välj Skapa.

    Skärmbild som visar Azure Functions-utlösare med HTTP-utlösare markerat.

    Visual Studio skapar WatchPortalFunction projektet och visar källkodsfilen Function1.cs för Functions App i kodredigerarens fönster. Filen innehåller koden för en klass med namnet Function1.

    Som du ser i följande exempelkod Function1 innehåller klassen exempelkod från HTTP-utlösarmallen. Metoden Run kommenteras med [FunctionName ("Function1")]-attributet. I föregående lektion lärde vi oss att parametrarna för boilerplate för Run metoden är ett HttpRequest objekt som innehåller information om den begäran som utlöste funktionen och en spårningsloggpost för registrering av spårningsinformation.

    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");
            }
        }
    }
    

Skapa WatchInfo Azure-funktionen

  1. I menyn Visa väljer du Solution Explorer. Högerklicka på Azure Functions-projektet WatchPortalFunction i Solution Explorer och välj Lägg till>ny Azure-funktion på snabbmenyn.

    Skärmbild av Solution Explorer-fönstret. Användaren har valt Lägg till –> Ny Azure-funktion.

  2. I fönstret Add New Item - WatchPortalFunction (Lägg till nytt objekt - WatchPortalFunction) väljer du Azure Function (Azure-funktion). I fältet Namn anger du WatchInfo.cs och väljer sedan Lägg till.

    Skärmbild av fönstret Lägg till nytt objekt. Azure-funktionsmallen är markerad och den nya funktionen heter WatchInfo.cs.

  3. I fönstret New Azure Function - WatchInfo (Ny Azure-funktion - WatchInfo) väljer du Http trigger (Http-utlösare). I listrutan Auktoriseringsnivå väljer du Anonym och sedan Lägg till.

    Skärmbild av fönstret Ny Azure-funktion. Http-utlösaren med anonym åtkomstbehörighet har valts.

    Visual Studio skapar en ny funktion och Run metoden kommenteras med attributet [FunctionName("WatchInfo")] .

  4. Ta bort koden efter log.LogInformation raden i brödtexten i Run funktionen. Resultatet bör se ut så här.

    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. Infoga följande kod i brödtexten i Run metoden efter log.LogInformation rad.

    // 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");
    

    Den här koden läser parametern model från frågesträngen i HTTP-begäran och returnerar information om klockmodellen. I den här exempelkoden skapade vi dummydata watchinfo som returneras oavsett värdet modelför . Funktionen returnerar ett svar som innehåller den här informationen. Om HTTP-begäran inte innehåller en frågesträng returnerar funktionen ett felmeddelande. I ett verkligt exempel använder model du värdet för att göra en sökning av rätt watchinfo för att returnera.

Testa Azure-funktionen lokalt

  1. I kommandofältet väljer du Felsöka>Starta felsökning.

    Visual Studio bygger Azure-funktionsappen och startar Azure Functions-körningen. Ett utdatafönster öppnas för att visa meddelanden när körningen startar. När körningen är klar visas en lista över HTTP-funktionerna och den URL som du kan använda för att utlösa varje funktion.

    Skärmbild av Azure Functions-körningsfönstret. Körningen startar Azure-funktionsappen och visar URL:erna för Azure Functions

  2. Öppna en webbläsare och ange den URL som visas i körningsfönstret. Standard-URL:en är http://localhost:7071/api/WatchInfo?model=abc, så det är den vi använder i den här övningen. Begäran utlöser WatchInfo funktionen och skickar modellen abc som frågesträngsparameter. Webbläsaren bör visa dummyinformationen som genereras av funktionen.

    Skärmbild av en webbläsare som utlöser WatchInfo Azure-funktionen. Funktionen returnerar dummyinformationen för modellen som anges i frågesträngen för den angivna URL:en.

  3. Ange URL:en http://localhost:7071/api/WatchInfo. Den här begäran innehåller inte en frågesträng. Utlösaren returnerar felsvaret och webbläsaren visar meddelandet Please provide a watch model in the query string.

  4. Stäng webbläsaren, men låt Azure-funktionsappen vara igång.

  5. Ange en brytpunkt i Visual Studio på den rad i koden som hämtar modellen från frågesträngen.

    Skärmbild av Visual Studio som visar en brytpunkt för -instruktionen som läser modellen från frågesträngen.

  6. Starta om webbläsaren och ange URL:en utan frågesträngen http://localhost:7071/api/WatchInfo.

    Visual Studio markerar koden vid brytpunkten där körningen pausas.

  7. Tryck på F10 för att gå över instruktionen vid brytpunkten i Visual Studio.

  8. På fliken Autos i felsökningsfönstret kontrollerar du att variabeln model är null. Variabeln visar det här värdet eftersom frågesträngen inte innehåller någon modellparameter.

    Skärmbild av Visual Studio-felsökningsprogrammet som visar värdet för modellvariabeln.

  9. Tryck på F10 igen och kontrollera att kontrollen hoppar till instruktionen som returnerar ett BadRequestObjectResult objekt.

  10. Om du vill fortsätta köra metoden och återgå till webbläsaren trycker du på F5. Samma felmeddelande ska visas.

  11. Ange URL:en med en frågesträng och en modellparameter i webbläsaren. Gå igenom funktionen i felsökningsprogrammet och kontrollera att modellen har hämtats korrekt. Variabeln model bör fyllas i med värdet för parametern, och informationen om modellen bör returneras som ett OkObjectResult-objekt.

  12. På menyraden väljer du Felsöka>sluta felsöka.

I den här övningen såg du hur Azure Functions Tools-tillägget i Visual Studio förenklar upplevelsen av att skapa en Azure-funktionsapp genom att låta dig använda välbekanta verktyg för att skapa och felsöka koden.