Övning – Skapa och testa en enkel Azure-funktion lokalt med Visual Studio
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 .
Starta Visual Studio Installer och välj Ändra på startsidan för Visual Studio 2022.
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.
På startsidan för Visual Studio 2022 väljer du Starta.
På menyn Kom igång väljer du Skapa ett nytt projekt. Fönstret Create a new project (Skapa ett nytt projekt) visas.
Sök efter eller bläddra till Azure Functions-mallen och välj sedan Nästa.
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. Välj Nästa.
Sidan Ytterligare information visas.
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.
Välj Skapa.
Visual Studio skapar
WatchPortalFunction
projektet och visar källkodsfilenFunction1.cs
för Functions App i kodredigerarens fönster. Filen innehåller koden för en klass med namnetFunction1
.Som du ser i följande exempelkod
Function1
innehåller klassen exempelkod från HTTP-utlösarmallen. MetodenRun
kommenteras med[FunctionName ("Function1")]
-attributet. I föregående lektion lärde vi oss att parametrarna för boilerplate förRun
metoden är ettHttpRequest
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
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.
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.
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.
Visual Studio skapar en ny funktion och
Run
metoden kommenteras med attributet[FunctionName("WatchInfo")]
.Ta bort koden efter
log.LogInformation
raden i brödtexten iRun
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."); } } }
Infoga följande kod i brödtexten i
Run
metoden efterlog.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 dummydatawatchinfo
som returneras oavsett värdetmodel
fö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ändermodel
du värdet för att göra en sökning av rättwatchinfo
för att returnera.
Testa Azure-funktionen lokalt
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.
Ö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öserWatchInfo
funktionen och skickar modellenabc
som frågesträngsparameter. Webbläsaren bör visa dummyinformationen som genereras av funktionen.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 meddelandetPlease provide a watch model in the query string
.Stäng webbläsaren, men låt Azure-funktionsappen vara igång.
Ange en brytpunkt i Visual Studio på den rad i koden som hämtar modellen från frågesträngen.
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.
Tryck på F10 för att gå över instruktionen vid brytpunkten i Visual Studio.
På fliken Autos i felsökningsfönstret kontrollerar du att variabeln
model
ärnull
. Variabeln visar det här värdet eftersom frågesträngen inte innehåller någon modellparameter.Tryck på F10 igen och kontrollera att kontrollen hoppar till instruktionen som returnerar ett
BadRequestObjectResult
objekt.Om du vill fortsätta köra metoden och återgå till webbläsaren trycker du på F5. Samma felmeddelande ska visas.
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 ettOkObjectResult
-objekt.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.