Procedura per scrivere una funzione HTTP in .NET 10, provarla sul computer e pubblicarla su Azure Functions con il piano Flex Consumption, che si paga in base all'uso. Le risorse si creano, si provano e si eliminano dal portale di Azure; dal computer si scrive il programma e si carica il pacchetto.

Occorre: un account Azure con una sottoscrizione attiva, .NET 10, l'interfaccia a riga di comando di Azure e Azure Functions Core Tools 4.16 o successivo sul computer. Durata: circa venti minuti. Costo: pochi centesimi, se elimini le risorse alla fine.

Il portale delle schermate è in inglese: i nomi dei comandi sono riportati come appaiono a schermo.

La funzione

1. Crea il progetto

func init func-demo --worker-runtime dotnet-isolated --target-framework net10.0
cd func-demo
func new --template "HTTP trigger" --name Hello --authlevel function

2. Scrivi il codice

Sostituisce Hello.cs:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;

namespace func_demo;

public class Hello
{
    [Function("Hello")]
    public IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req)
    {
        string name = req.Query["name"].FirstOrDefault() ?? "world";
        return new OkObjectResult($"Hello, {name}!");
    }
}

AuthorizationLevel.Function significa che su Azure la funzione risponde solo a chi presenta una chiave.

3. Provala sul computer

func start --port 7077

Apri http://localhost:7077/api/Hello?name=Extra-Net:

Hello, Extra-Net!

Sul computer la chiave non viene controllata.

Su Azure

4. Scegli il piano

Apri https://portal.azure.com/#create/Microsoft.FunctionApp. Lascia selezionato Flex Consumption e premi Select.

La scelta del piano, con Flex Consumption selezionato

5. Crea la Function App

Nella scheda Basics compila:

  • Resource Group: Create new, rg-guide-func-01, OK
  • Function App name: un nome tuo, qui fn-guide-extranet-01
  • Region: West Europe
  • Runtime stack: .NET
  • Version: 10 (LTS), isolated worker model
  • Instance size: 2048 MB

La scheda Basics compilata

Premi Review + create. Le altre schede restano come sono: il portale propone da solo l'account di archiviazione e il piano.

Il riepilogo prima della creazione

Premi Create e aspetta Your deployment is complete.

La creazione completata

6. Carica il programma

Dalla cartella del progetto:

dotnet publish -c Release -o publish
cd publish
zip -r ../func-demo.zip .
cd ..
az functionapp deployment source config-zip -n fn-guide-extranet-01 \
  -g rg-guide-func-01 --src func-demo.zip

In PowerShell, al posto della riga con zip, usa tar -a -cf ../func-demo.zip .. Il pacchetto deve contenere la cartella nascosta .azurefunctions: nella prova Compress-Archive l'ha lasciata fuori e Azure ha rifiutato il pacchetto.

Nella prova su Windows, func azure functionapp publish di Core Tools 4.16.0 si è fermato con The underlying compression routine could not be loaded correctly: per questo la procedura carica il pacchetto con az. Il caricamento ha richiesto 79 secondi.

Nel portale apri la Function App: in Overview, scheda Functions, compare Hello. In Default domain c'è l'indirizzo dell'applicazione: il nome che hai scelto, seguito da una parte generata da Azure.

La funzione Hello nella Function App, attiva

7. Prova dal portale

Premi Hello. Si apre la pagina Code + Test: un programma .NET già compilato non si modifica da qui.

La pagina Code + Test della funzione

Premi Test/Run e compila:

  • HTTP method: GET
  • Key: default (Function key)
  • Query parameters: Name name, Value Extra-Net

Il pannello Test/Run compilato

Premi Run. Nella scheda Output:

La risposta 200 OK della funzione

8. Prova senza chiave

Copia l'indirizzo di Default domain e apri nel browser https://<indirizzo>/api/Hello?name=Extra-Net, senza nessuna chiave. Azure risponde 401: la funzione esiste, ma senza chiave non risponde. È il comportamento giusto.

9. Trova la chiave

Nella funzione apri Function Keys. Il valore resta nascosto finché non premi Show value. Si passa all'indirizzo aggiungendo &code=<chiave>. La chiave dà accesso alla funzione: non scriverla nel codice e non pubblicarla.

La chiave default, con il valore nascosto

Eliminare le risorse

10. Elimina il gruppo

Apri il gruppo rg-guide-func-01. Contiene sei risorse, create tutte dal portale: piano, Function App, account di archiviazione, Application Insights e due elementi di avviso.

Le sei risorse dentro il gruppo

Premi Delete resource group, scrivi il nome del gruppo per confermare, premi Delete e, nella finestra che segue, di nuovo Delete.

La conferma dell'eliminazione del gruppo

Nomi dei comandi, schermate e risposte rilevati il 9 novembre 2026, regione West Europe, con .NET 10.0.401, Azure Functions Core Tools 4.16.0 e l'interfaccia a riga di comando di Azure 2.91.0.