Trigger HTTP di Funzioni di AzureAzure Functions HTTP trigger

Un trigger HTTP consente di richiamare una funzione con una richiesta HTTPThe HTTP trigger lets you invoke a function with an HTTP request. e può essere usato per compilare API senza server e rispondere ai webhook.You can use an HTTP trigger to build serverless APIs and respond to webhooks.

Il valore restituito predefinito per una funzione attivata tramite HTTP è:The default return value for an HTTP-triggered function is:

  • HTTP 204 No Content con un corpo vuoto in Funzioni 2.x e versioni successiveHTTP 204 No Content with an empty body in Functions 2.x and higher
  • HTTP 200 OK con un corpo vuoto in Funzioni 1.xHTTP 200 OK with an empty body in Functions 1.x

Per modificare la risposta HTTP, configurare un'associazione di output.To modify the HTTP response, configure an output binding.

Per ulteriori informazioni sulle associazioni HTTP, vedere la panoramica e i riferimenti all’associazione di output.For more information about HTTP bindings, see the overview and output binding reference.

Suggerimento

Se si prevede di usare binding HTTP o WebHook, evitare l'esaurimento delle porte che può essere causato da un'errata creazione di istanze di HttpClient.If you plan to use the HTTP or WebHook bindings, plan to avoid port exhaustion that can be caused by improper instantiation of HttpClient. Per altre informazioni, vedere How to manage connections in Azure Functions (Come gestire le connessioni in Funzioni di Azure).For more information, see How to manage connections in Azure Functions.

EsempioExample

L'esempio seguente mostra una funzione in C# che cerca un parametro name nella stringa di query o nel corpo della richiesta HTTP.The following example shows a C# function that looks for a name parameter either in the query string or the body of the HTTP request. Si noti che il valore restituito viene usato per l'associazione di output, ma non è necessario un attributo di valore restituito.Notice that the return value is used for the output binding, but a return value attribute isn't required.

[FunctionName("HttpTriggerCSharp")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
    HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];
    
    string requestBody = String.Empty;
    using (StreamReader streamReader =  new  StreamReader(req.Body))
    {
        requestBody = await streamReader.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");
}

Attributi e annotazioniAttributes and annotations

Nelle librerie delle classi C# e Java, è disponibile l’attributo HttpTrigger per configurare la funzione.In C# class libraries and Java, the HttpTrigger attribute is available to configure the function.

È possibile impostare il livello di autorizzazione e i metodi HTTP consentiti nei parametri di costruttore dell'attributo, nel tipo di webhook e un modello di route.You can set the authorization level and allowable HTTP methods in attribute constructor parameters, webhook type, and a route template. Per ulteriori informazioni su queste impostazioni, vedere configurazione.For more information about these settings, see configuration.

Questo esempio illustra come usare l'attributo HttpTrigger.This example demonstrates how to use the HttpTrigger attribute.

[FunctionName("HttpTriggerCSharp")]
public static Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequest req)
{
    ...
}

Per un esempio completo, vedere l’esempio di trigger.For a complete example, see the trigger example.

ConfigurazioneConfiguration

Nella tabella seguente sono illustrate le proprietà di configurazione dell'associazione impostate nel file function.json e nell'attributo HttpTrigger.The following table explains the binding configuration properties that you set in the function.json file and the HttpTrigger attribute.

Proprietà di function.jsonfunction.json property Proprietà dell'attributoAttribute property DescrizioneDescription
typetype n/dn/a Obbligatoria. Deve essere impostata su httpTrigger.Required - must be set to httpTrigger.
directiondirection n/dn/a Obbligatoria. Deve essere impostata su in.Required - must be set to in.
nomename n/dn/a Obbligatoria. Nome della variabile usato nel codice della funzione per la richiesta o il corpo della richiesta.Required - the variable name used in function code for the request or request body.
authLevelauthLevel AuthLevelAuthLevel Determina le eventuali chiavi che devono essere presenti nella richiesta per richiamare la funzione.Determines what keys, if any, need to be present on the request in order to invoke the function. Il livello di autorizzazione può corrispondere a uno dei valori seguenti:The authorization level can be one of the following values:
  • anonymous—Non è richiesta nessuna chiave API.anonymous—No API key is required.
  • function—È richiesta una chiave API specifica della funzione.function—A function-specific API key is required. Questo è il valore predefinito se non ne viene specificato nessuno.This is the default value if none is provided.
  • admin—È richiesta la chiave master.admin—The master key is required.
Per altre informazioni, consultare la sezione sulle chiavi di autorizzazione.For more information, see the section about authorization keys.
methodsmethods MetodiMethods Matrice di metodi HTTP a cui la funzione risponde.An array of the HTTP methods to which the function responds. Se non viene specificata, la funzione risponde a tutti i metodi HTTP.If not specified, the function responds to all HTTP methods. Vedere Personalizzare l'endpoint HTTP.See customize the HTTP endpoint.
routeroute RouteRoute Definisce il modello di route, controllando a quali URL di richiesta risponde la funzione.Defines the route template, controlling to which request URLs your function responds. Il valore predefinito, se non ne viene specificato nessuno, è <functionname>.The default value if none is provided is <functionname>. Per altre informazioni, vedere Personalizzare l'endpoint HTTP.For more information, see customize the HTTP endpoint.
webHookTypewebHookType WebHookTypeWebHookType Supportato solo per la versione di runtime 1.x.Supported only for the version 1.x runtime.

Configura il trigger HTTP perché funga da ricevitore webhook per il provider specificato.Configures the HTTP trigger to act as a webhook receiver for the specified provider. Non impostare la proprietà methods se si imposta questa proprietà.Don't set the methods property if you set this property. Il tipo di webhook può essere uno dei seguenti:The webhook type can be one of the following values:
  • genericJson—Endpoint di webhook per uso generico senza logica per un provider specifico.genericJson—A general-purpose webhook endpoint without logic for a specific provider. Questa impostazione limita le richieste solo a quelle che usano HTTP POST e con il tipo di contenuto application/json.This setting restricts requests to only those using HTTP POST and with the application/json content type.
  • github—La funzione risponde ai webhook GitHub.github—The function responds to GitHub webhooks. Non usare la proprietà authLevel con webhook GitHub.Do not use the authLevel property with GitHub webhooks. Per altre informazioni, vedere la sezione con relativa ai webhook GitHub più avanti in questo articolo.For more information, see the GitHub webhooks section later in this article.
  • slack—La funzione risponde ai webhook Slack.slack—The function responds to Slack webhooks. Non usare la proprietà authLevel con webhook Slack.Do not use the authLevel property with Slack webhooks. Per altre informazioni, vedere la sezione con relativa ai webhook Slack più avanti in questo articolo.For more information, see the Slack webhooks section later in this article.

PayloadPayload

Il tipo di input del trigger viene dichiarato come HttpRequest o come tipo personalizzato.The trigger input type is declared as either HttpRequest or a custom type. Se si sceglie HttpRequest, si ottiene accesso completo all'oggetto richiesta.If you choose HttpRequest, you get full access to the request object. Per un tipo personalizzato, il runtime cerca di analizzare il corpo della richiesta JSON per impostare le proprietà dell'oggetto.For a custom type, the runtime tries to parse the JSON request body to set the object properties.

Personalizzare l'endpoint HTTPCustomize the HTTP endpoint

Per impostazione predefinita, quando si crea una funzione per un trigger HTTP la funzione può essere indirizzata con una route nel formato seguente:By default when you create a function for an HTTP trigger, the function is addressable with a route of the form:

http://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>

È possibile personalizzare questa route tramite la proprietà route facoltativa nell'associazione di input del trigger HTTP.You can customize this route using the optional route property on the HTTP trigger's input binding. Ad esempio, il file function.json seguente definisce una proprietà route per un trigger HTTP:As an example, the following function.json file defines a route property for an HTTP trigger:

{
    "bindings": [
    {
        "type": "httpTrigger",
        "name": "req",
        "direction": "in",
        "methods": [ "get" ],
        "route": "products/{category:alpha}/{id:int?}"
    },
    {
        "type": "http",
        "name": "res",
        "direction": "out"
    }
    ]
}

Con questa configurazione, la funzione può ora essere indirizzata con la route seguente invece che con quella originale.Using this configuration, the function is now addressable with the following route instead of the original route.

http://<APP_NAME>.azurewebsites.net/api/products/electronics/357

Questa configurazione consente al codice della funzione di supportare due parametri nell'indirizzo, category e id.This configuration allows the function code to support two parameters in the address, category and id.

I parametri sono compatibili con qualsiasi vincolo di route dell'API Web.You can use any Web API Route Constraint with your parameters. Il codice di funzione C# seguente usa entrambi i parametri.The following C# function code makes use of both parameters.

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;

public static IActionResult Run(HttpRequest req, string category, int? id, ILogger log)
{
    var message = String.Format($"Category: {category}, ID: {id}");
    return (ActionResult)new OkObjectResult(message);
}

Per impostazione predefinita, tutte le route di funzione sono precedute da api.By default, all function routes are prefixed with api. È inoltre possibile personalizzare o rimuovere il prefisso con la proprietà extensions.http.routePrefix nel file host.json.You can also customize or remove the prefix using the extensions.http.routePrefix property in your host.json file. Nell'esempio seguente viene rimosso il prefisso della route api usando una stringa vuota per il prefisso nel file host.json.The following example removes the api route prefix by using an empty string for the prefix in the host.json file.

{
    "extensions": {
        "http": {
            "routePrefix": ""
        }
    }
}

Uso dei parametri di routeUsing route parameters

I parametri di route che definiscono il modello di route di una funzione sono disponibili per ogni associazione.Route parameters that defined a function's route pattern are available to each binding. Se, ad esempio, è presente una route definita come "route": "products/{id}", un'associazione di archiviazione tabelle può usare il valore del parametro {id} nella configurazione dell'associazione.For example, if you have a route defined as "route": "products/{id}" then a table storage binding can use the value of the {id} parameter in the binding configuration.

La configurazione seguente illustra in che modo il parametro {id} viene passato a rowKey dell'associazione.The following configuration shows how the {id} parameter is passed to the binding's rowKey.

{
    "type": "table",
    "direction": "in",
    "name": "product",
    "partitionKey": "products",
    "tableName": "products",
    "rowKey": "{id}"
}

Quando si usano i parametri di route, invoke_URL_template viene creato automaticamente un oggetto per la funzione.When you use route parameters, an invoke_URL_template is automatically created for your function. I client possono usare il modello di URL per comprendere i parametri che devono passare all'URL quando chiamano la funzione usando il relativo URL.Your clients can use the URL template to understand the parameters they need to pass in the URL when calling your function using its URL. Passare a una delle funzioni attivate da HTTP nella portale di Azure e selezionare Ottieni URL funzione.Navigate to one of your HTTP-triggered functions in the Azure portal and select Get function URL.

È possibile accedere a a livello invoke_URL_template di codice usando le api Azure Resource Manager per le funzioni di elenco o Get Function.You can programmatically access the invoke_URL_template by using the Azure Resource Manager APIs for List Functions or Get Function.

Utilizzo delle identità clientWorking with client identities

Se l'app per le funzioni usa l'autenticazione/autorizzazione di Servizio app , è possibile visualizzare informazioni sui client autenticati dal codice.If your function app is using App Service Authentication / Authorization, you can view information about authenticated clients from your code. Queste informazioni sono disponibili come intestazioni delle richieste inserite dalla piattaforma.This information is available as request headers injected by the platform.

È anche possibile leggere queste informazioni dai dati di binding.You can also read this information from binding data. Questa funzionalità è disponibile solo per il runtime di Funzioni 2.x e versioni successive.This capability is only available to the Functions runtime in 2.x and higher. È anche al momento disponibile solo per i linguaggi .NET.It is also currently only available for .NET languages.

Le informazioni relative ai client autenticati sono disponibili come ClaimsPrincipal.Information regarding authenticated clients is available as a ClaimsPrincipal. ClaimsPrincipal è disponibile come parte del contesto della richiesta, come illustrato nell'esempio seguente:The ClaimsPrincipal is available as part of the request context as shown in the following example:

using System.Net;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;

public static IActionResult Run(HttpRequest req, ILogger log)
{
    ClaimsPrincipal identities = req.HttpContext.User;
    // ...
    return new OkObjectResult();
}

In alternativa, è possibile includere semplicemente ClaimsPrincipal come parametro aggiuntivo nella firma della funzione:Alternatively, the ClaimsPrincipal can simply be included as an additional parameter in the function signature:

using System.Net;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;
using Newtonsoft.Json.Linq;

public static void Run(JObject input, ClaimsPrincipal principal, ILogger log)
{
    // ...
    return;
}

Chiavi di accesso alle funzioniFunction access keys

Funzioni consente di usare in fase di sviluppo le chiavi che rendono più difficile accedere agli endpoint di funzione HTTP.Functions lets you use keys to make it harder to access your HTTP function endpoints during development. A meno che il livello di accesso HTTP in una funzione attivata tramite HTTP non sia impostato su anonymous, le richieste devono includere una chiave di accesso all'API.Unless the HTTP access level on an HTTP triggered function is set to anonymous, requests must include an API access key in the request.

Sebbene le chiavi forniscano un meccanismo di sicurezza predefinito, è consigliabile prendere in considerazione opzioni aggiuntive per proteggere un endpoint HTTP nell'ambiente di produzione.While keys provide a default security mechanism, you may want to consider additional options to secure an HTTP endpoint in production. Ad esempio, in genere non è consigliabile distribuire il segreto condiviso nelle app pubbliche.For example, it's generally not a good practice to distribute shared secret in public apps. Se la funzione viene chiamata da un client pubblico, è consigliabile implementare un altro meccanismo di sicurezza.If your function is being called from a public client, you may want to consider implementing another security mechanism. Per altre informazioni, vedere Proteggere un endpoint HTTP nell'ambiente di produzione.To learn more, see Secure an HTTP endpoint in production.

Quando si rinnovano i valori della chiave della funzione, è necessario ridistribuire manualmente i valori di chiave aggiornati a tutti i client che chiamano la funzione.When you renew your function key values, you must manually redistribute the updated key values to all clients that call your function.

Ambiti di autorizzazione (a livello di funzione)Authorization scopes (function-level)

Sono disponibili due ambiti dell'accesso per le chiavi a livello di funzione:There are two access scopes for function-level keys:

  • Funzione: queste chiavi si applicano solo alle funzioni specifiche per le quali vengono definite.Function: These keys apply only to the specific functions under which they are defined. Quando vengono usate come chiave API, consentono l'accesso solo a tale funzione.When used as an API key, these only allow access to that function.

  • Host: È possibile usare le chiavi con un ambito host per accedere a tutte le funzioni all'interno dell'app per le funzioni.Host: Keys with a host scope can be used to access all functions within the function app. Quando vengono usate come chiave API, consentono l'accesso a tutte le funzioni nell'app per le funzioni.When used as an API key, these allow access to any function within the function app.

Ogni chiave viene denominata per riferimento ed esiste una chiave predefinita (denominata "default") a livello di funzione e di host.Each key is named for reference, and there is a default key (named "default") at the function and host level. Le chiavi di funzione hanno la precedenza sulle chiavi host.Function keys take precedence over host keys. Se sono definite due chiavi con lo stesso nome, viene usata sempre la chiave di funzione.When two keys are defined with the same name, the function key is always used.

Chiave master (a livello di amministratore)Master key (admin-level)

Ogni app per le funzioni dispone anche di una chiave host a livello di amministratore denominata _master.Each function app also has an admin-level host key named _master. Oltre a fornire l'accesso a livello di host a tutte le funzioni nell'app, la chiave master offre anche l'accesso amministrativo alle API REST di runtime.In addition to providing host-level access to all functions in the app, the master key also provides administrative access to the runtime REST APIs. Questa chiave non può essere revocata.This key cannot be revoked. Quando si imposta un livello di accesso admin, le richieste devono usare la chiave master. Qualsiasi altra chiave provoca un errore di accesso.When you set an access level of admin, requests must use the master key; any other key results in access failure.

Attenzione

Date le autorizzazioni elevate concesse dalla chiave master nell'app per le funzioni, è consigliabile non condividere questa chiave con terze parti o distribuirla in applicazioni client native.Due to the elevated permissions in your function app granted by the master key, you should not share this key with third parties or distribute it in native client applications. Fare attenzione quando si sceglie il livello di accesso di amministratore.Use caution when choosing the admin access level.

Ottenere le chiaviObtaining keys

Le chiavi vengono archiviate come parte dell'app per le funzioni in Azure e crittografate inattive.Keys are stored as part of your function app in Azure and are encrypted at rest. Per visualizzare le chiavi, crearne di nuove o eseguire il rollforward di chiavi in nuovi valori, passare a una delle funzioni attivate da HTTP nella portale di Azure e selezionare tasti funzione.To view your keys, create new ones, or roll keys to new values, navigate to one of your HTTP-triggered functions in the Azure portal and select Function Keys.

È anche possibile gestire le chiavi host.You can also manage host keys. Passare all'app per le funzioni nella portale di Azure e selezionare chiavi app.Navigate to the function app in the Azure portal and select App keys.

È possibile ottenere le chiavi di funzione e host a livello di codice usando le API Azure Resource Manager.You can obtain function and host keys programmatically by using the Azure Resource Manager APIs. Sono disponibili API per elencare le chiavi di funzione e elencare le chiavi host. quando si usano gli slot di distribuzione, le API equivalenti sono elencate slot per chiavi della funzione ed elenco di chiavi host.There are APIs to List Function Keys and List Host Keys, and when using deployment slots the equivalent APIs are List Function Keys Slot and List Host Keys Slot.

È anche possibile creare nuove chiavi di funzione e host a livello di codice usando il segreto della funzione crea o aggiorna, Crea o aggiorna slot segreto della funzione, Crea o aggiorna il segreto host e Crea o aggiorna le API degli slot del segreto host.You can also create new function and host keys programmatically by using the Create Or Update Function Secret, Create Or Update Function Secret Slot, Create Or Update Host Secret and Create Or Update Host Secret Slot APIs.

Le chiavi della funzione e dell'host possono essere eliminate a livello di codice usando il segreto della funzione Delete, eliminare lo slot del segreto della funzione, eliminare il segreto hosted eliminare le API degli slot segreti host .Function and host keys can be deleted programmatically by using the Delete Function Secret, Delete Function Secret Slot, Delete Host Secret, and Delete Host Secret Slot APIs.

È anche possibile usare le API di gestione delle chiavi legacy per ottenere i tasti funzione, ma è consigliabile usare invece le API Azure Resource Manager.You can also use the legacy key management APIs to obtain function keys, but using the Azure Resource Manager APIs is recommended instead.

Autorizzazione della chiave APIAPI key authorization

La maggior parte dei modelli di trigger HTTP richiedono una chiave API nella richiesta.Most HTTP trigger templates require an API key in the request. La richiesta HTTP è quindi in genere simile al seguente URL:So your HTTP request normally looks like the following URL:

https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?code=<API_KEY>

La chiave può essere inclusa in una variabile della stringa di query denominata code, come sopra.The key can be included in a query string variable named code, as above. Può anche essere inclusa in un'intestazione HTTP x-functions-key.It can also be included in an x-functions-key HTTP header. Il valore della chiave può essere una chiave di funzione definita per la funzione o una chiave host.The value of the key can be any function key defined for the function, or any host key.

È possibile consentire le richieste anonime, che non richiedono chiavi.You can allow anonymous requests, which do not require keys. È anche possibile richiedere l'uso della chiave master.You can also require that the master key is used. Per modificare il livello di autorizzazione predefinito, usare la proprietà authLevel nel file JSON di binding.You change the default authorization level by using the authLevel property in the binding JSON. Per altre informazioni, vedere Trigger - configurazioneFor more information, see Trigger - configuration.

Nota

Quando si eseguono funzioni localmente, l'autorizzazione viene disabilitata indipendentemente dall'impostazione del livello di autorizzazione specificata.When running functions locally, authorization is disabled regardless of the specified authorization level setting. Dopo la pubblicazione in Azure, viene applicata l'impostazione authLevel del trigger.After publishing to Azure, the authLevel setting in your trigger is enforced. Le chiavi sono comunque necessarie durante l’esecuzione in locale in un contenitore.Keys are still required when running locally in a container.

Proteggere un endpoint HTTP nell'ambiente di produzioneSecure an HTTP endpoint in production

Per proteggere completamente gli endpoint di funzione nell'ambiente di produzione, è consigliabile implementare una delle opzioni di sicurezza a livello di app per le funzioni seguenti.To fully secure your function endpoints in production, you should consider implementing one of the following function app-level security options. Quando si usa uno di questi metodi di sicurezza a livello di app per le funzioni, è necessario impostare il livello di autorizzazione delle funzioni attivate da HTTP su anonymous.When using one of these function app-level security methods, you should set the HTTP-triggered function authorization level to anonymous.

Abilitare l'autenticazione/autorizzazione di Servizio app di AzureEnable App Service Authentication/Authorization

La piattaforma Servizio app di Azure consente di usare Azure Active Directory (AAD) e diversi provider di identità di terze parti per autenticare i client.The App Service platform lets you use Azure Active Directory (AAD) and several third-party identity providers to authenticate clients. È possibile usare questa strategia per implementare regole di autorizzazione personalizzate per le funzioni ed è possibile lavorare con le informazioni utente dal codice di funzione.You can use this strategy to implement custom authorization rules for your functions, and you can work with user information from your function code. Per altre informazioni, vedere Autenticazione e autorizzazione in Servizio app di Azure e Utilizzo delle identità client.To learn more, see Authentication and authorization in Azure App Service and Working with client identities.

Usare Gestione API di Azure (APIM) per autenticare le richiesteUse Azure API Management (APIM) to authenticate requests

APIM offre un'ampia gamma di opzioni di sicurezza di API per le richieste in ingresso.APIM provides a variety of API security options for incoming requests. Per altre informazioni, vedere Criteri di autenticazione di Gestione API di Azure.To learn more, see API Management authentication policies. Con APIM, è possibile configurare l'app per le funzioni in modo che accetti le richieste solo dall'indirizzo IP dell'istanza APIM.With APIM in place, you can configure your function app to accept requests only from the IP address of your APIM instance. Per altre informazioni, vedere Restrizioni degli indirizzi IP.To learn more, see IP address restrictions.

Distribuire l'app per le funzioni in isolamentoDeploy your function app in isolation

L'ambiente del servizio app di Azure offre un ambiente di hosting dedicato in cui eseguire le funzioni.Azure App Service Environment (ASE) provides a dedicated hosting environment in which to run your functions. L'ASE consente di configurare un singolo gateway front-end che è possibile usare per autenticare tutte le richieste in ingresso.ASE lets you configure a single front-end gateway that you can use to authenticate all incoming requests. Per altre informazioni, vedere Configurazione di un web application firewall (WAF) per l'ambiente del servizio app.For more information, see Configuring a Web Application Firewall (WAF) for App Service Environment.

WebhookWebhooks

Nota

La modalità webhook è disponibile solo per il runtime di funzioni versione 1.x.Webhook mode is only available for version 1.x of the Functions runtime. Questa modifica è stata apportata per migliorare le prestazioni dei trigger HTTP nella versione 2.x e successive.This change was made to improve the performance of HTTP triggers in version 2.x and higher.

Nella versione 1.x, i modelli webhook forniscono una convalida aggiuntiva per i payload di webhook.In version 1.x, webhook templates provide additional validation for webhook payloads. Nella versione 2.x e successive, il trigger HTTP di base è ancora funzionante ed è l'approccio consigliato per i webhook.In version 2.x and higher, the base HTTP trigger still works and is the recommended approach for webhooks.

Webhook GitHubGitHub webhooks

Per rispondere ai webhook GitHub, creare prima di tutto la funzione con un trigger HTTP e impostare la proprietà webHookType su github.To respond to GitHub webhooks, first create your function with an HTTP Trigger, and set the webHookType property to github. Copiare quindi l'URL e la chiave API nella pagina Aggiungi webhook del repository GitHub.Then copy its URL and API key into the Add webhook page of your GitHub repository.

Screenshot che illustra come aggiungere un webhook per la funzione.

Webhook SlackSlack webhooks

Il webhook Slack genera automaticamente un token invece di consentire di specificarlo, quindi è necessario configurare una chiave specifica della funzione con il token da Slack.The Slack webhook generates a token for you instead of letting you specify it, so you must configure a function-specific key with the token from Slack. Vedere Chiavi di autorizzazione.See Authorization keys.

Chiavi e webhookWebhooks and keys

L'autorizzazione webhook viene gestita dal componente ricevitore dei webhook, che fa parte del trigger HTTP, e il meccanismo varia in base al tipo di webhook.Webhook authorization is handled by the webhook receiver component, part of the HTTP trigger, and the mechanism varies based on the webhook type. Ogni meccanismo si basa su una chiave.Each mechanism does rely on a key. Per impostazione predefinita, viene usata la chiave di funzione denominata "default".By default, the function key named "default" is used. Per usare una chiave diversa, configurare il provider di webhook per inviare il nome della chiave con la richiesta in uno dei modi seguenti:To use a different key, configure the webhook provider to send the key name with the request in one of the following ways:

  • Stringa di query: il provider passa il nome della chiave nel parametro della stringa di query clientid, ad esempio https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?clientid=<KEY_NAME>.Query string: The provider passes the key name in the clientid query string parameter, such as https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?clientid=<KEY_NAME>.
  • Intestazione della richiesta: il provider passa il nome della chiave nell'intestazione x-functions-clientid.Request header: The provider passes the key name in the x-functions-clientid header.

Tipi di contenutoContent types

Per passare dati binari e del modulo a una funzione non C # è necessario usare l'intestazione Content-Type appropriata.Passing binary and form data to a non-C# function requires that you use the appropriate content-type header. I tipi di contenuto supportati includono octet-stream per i dati binari e i tipi multipart.Supported content types include octet-stream for binary data and multipart types.

Problemi notiKnown issues

Nelle funzioni non C #, le richieste inviate con Content-Type image/jpeg generano un string valore passato alla funzione.In non-C# functions, requests sent with the content-type image/jpeg results in a string value passed to the function. In casi come questi, è possibile convertire manualmente il string valore in una matrice di byte per accedere ai dati binari non elaborati.In cases like these, you can manually convert the string value to a byte array to access the raw binary data.

LimitiLimits

La lunghezza della richiesta HTTP è limitata a 100 MB (104.857.600 byte) e la lunghezza dell'URL è limitata a 4 KB (4096 byte).The HTTP request length is limited to 100 MB (104,857,600 bytes), and the URL length is limited to 4 KB (4,096 bytes). Questi limiti vengono specificati dall'elemento httpRuntime del file web.config del runtime.These limits are specified by the httpRuntime element of the runtime's Web.config file.

Se una funzione che usa il trigger HTTP non viene completata entro 230 secondi, Azure Load Balancer raggiungerà il timeout e restituirà un errore HTTP 502.If a function that uses the HTTP trigger doesn't complete within 230 seconds, the Azure Load Balancer will time out and return an HTTP 502 error. La funzione rimarrà in esecuzione, ma non riuscirà a restituire una risposta HTTP.The function will continue running but will be unable to return an HTTP response. Per le funzioni con esecuzione prolungata, è consigliabile seguire modelli asincroni e restituire una posizione in cui è possibile effettuare il ping dello stato della richiesta.For long-running functions, we recommend that you follow async patterns and return a location where you can ping the status of the request. Per informazioni su quanto tempo può durare l'esecuzione di una funzione, vedere Scalabilità e hosting - Piano a consumo.For information about how long a function can run, see Scale and hosting - Consumption plan.

Passaggi successiviNext steps