HTTP-trigger voor Azure Functions
Met de HTTP-trigger kunt u een functie aanroepen met een HTTP-aanvraag. U kunt een HTTP-trigger gebruiken om serverloze API's te bouwen en te reageren op webhooks.
De standaard retourwaarde voor een door HTTP geactiveerde functie is:
HTTP 204 No Content
met een lege hoofdtekst in Functions 2.x en hogerHTTP 200 OK
met een lege hoofdtekst in Functions 1.x
Als u het HTTP-antwoord wilt wijzigen, configureert u een uitvoerbinding.
Zie de overzichts - en uitvoerbindingsreferentie voor meer informatie over HTTP-bindingen.
Tip
Als u van plan bent om de HTTP- of WebHook-bindingen te gebruiken, plan dan om uitputting van de poort te voorkomen. Dat kan worden veroorzaakt door onjuiste instantie-instellingen van HttpClient
. Raadpleeg Verbindingen beheren in Azure Functions voor meer informatie.
Belangrijk
In dit artikel worden tabbladen gebruikt ter ondersteuning van meerdere versies van het Node.js programmeermodel. Het v4-model is algemeen beschikbaar en is ontworpen voor een flexibelere en intuïtievere ervaring voor JavaScript- en TypeScript-ontwikkelaars. Raadpleeg de ontwikkelaarshandleiding voor Azure Functions Node.js voor meer informatie over hoe het v4-model werkt. Raadpleeg de migratiehandleiding voor meer informatie over de verschillen tussen v3 en v4.
Azure Functions ondersteunt twee programmeermodellen voor Python. De manier waarop u uw bindingen definieert, is afhankelijk van het gekozen programmeermodel.
Met het Python v2-programmeermodel kunt u bindingen definiëren met behulp van decorators rechtstreeks in uw Python-functiecode. Zie de Ontwikkelaarshandleiding voor Python voor meer informatie.
Dit artikel ondersteunt beide programmeermodellen.
Opmerking
U kunt een C#-functie maken met behulp van een van de volgende C#-modi:
- Geïsoleerd werkrolmodel: gecompileerde C#-functie die wordt uitgevoerd in een werkproces dat is geïsoleerd van de runtime. Geïsoleerd werkproces is vereist voor de ondersteuning van C#-functies die worden uitgevoerd op LTS- en niet-LTS-versies .NET en .NET Framework. Extensies voor geïsoleerde werkprocesfuncties maken gebruik van
Microsoft.Azure.Functions.Worker.Extensions.*
naamruimten. - In-process model: gecompileerde C#-functie die wordt uitgevoerd in hetzelfde proces als de Functions-runtime. In een variatie van dit model kunnen functies worden uitgevoerd met behulp van C#-scripting. Dit wordt voornamelijk ondersteund voor het bewerken van de C#-portal. Extensies voor in-process-functies maken gebruik van
Microsoft.Azure.WebJobs.Extensions.*
naamruimten.
Belangrijk
De ondersteuning wordt beëindigd voor het in-process model op 10 november 2026. We raden u ten zeerste aan uw apps te migreren naar het geïsoleerde werkrolmodel voor volledige ondersteuning.
De code in dit artikel is standaard ingesteld op .NET Core-syntaxis, die wordt gebruikt in Functions versie 2.x en hoger. Zie de 1.x-functiessjablonen voor meer informatie over de syntaxis van 1.x.
In het volgende voorbeeld ziet u een HTTP-trigger die een antwoord 'hallo wereld' retourneert als een IActionResult, met behulp van ASP.NET Core-integratie in .NET Isolated:
[Function("HttpFunction")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req)
{
return new OkObjectResult($"Welcome to Azure Functions, {req.Query["name"]}!");
}
In het volgende voorbeeld ziet u een HTTP-trigger die een 'hallo wereld'-antwoord retourneert als een HttpResponseData-object :
[Function(nameof(HttpFunction))]
public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestData req,
FunctionContext executionContext)
{
var logger = executionContext.GetLogger(nameof(HttpFunction));
logger.LogInformation("message logged");
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
response.WriteString("Welcome to .NET isolated worker !!");
return response;
}
Deze sectie bevat de volgende voorbeelden:
- Parameter lezen uit de querytekenreeks
- Hoofdtekst lezen van een POST-aanvraag
- Parameter van een route lezen
- PoJO-hoofdtekst lezen uit een POST-aanvraag
In de volgende voorbeelden ziet u de HTTP-triggerbinding.
Parameter lezen uit de querytekenreeks
In dit voorbeeld wordt een parameter met de naam id
, uit de querytekenreeks gelezen en gebruikt om een JSON-document te bouwen dat wordt geretourneerd naar de client, met inhoudstype application/json
.
@FunctionName("TriggerStringGet")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
// Item list
context.getLogger().info("GET parameters are: " + request.getQueryParameters());
// Get named parameter
String id = request.getQueryParameters().getOrDefault("id", "");
// Convert and display
if (id.isEmpty()) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client
// Generate document
final String name = "fake_name";
final String jsonDocument = "{\"id\":\"" + id + "\", " +
"\"description\": \"" + name + "\"}";
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(jsonDocument)
.build();
}
}
Hoofdtekst lezen van een POST-aanvraag
In dit voorbeeld wordt de hoofdtekst van een POST-aanvraag gelezen, als een String
, en wordt gebruikt om een JSON-document te bouwen dat wordt geretourneerd aan de client, met inhoudstype application/json
.
@FunctionName("TriggerStringPost")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
// Item list
context.getLogger().info("Request body is: " + request.getBody().orElse(""));
// Check request body
if (!request.getBody().isPresent()) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client
// Generate document
final String body = request.getBody().get();
final String jsonDocument = "{\"id\":\"123456\", " +
"\"description\": \"" + body + "\"}";
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(jsonDocument)
.build();
}
}
Parameter van een route lezen
In dit voorbeeld wordt een verplichte parameter, benoemd id
en een optionele parameter name
uit het routepad gelezen en gebruikt om een JSON-document te bouwen dat wordt geretourneerd naar de client, met inhoudstype application/json
.
@FunctionName("TriggerStringRoute")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "trigger/{id}/{name=EMPTY}") // name is optional and defaults to EMPTY
HttpRequestMessage<Optional<String>> request,
@BindingName("id") String id,
@BindingName("name") String name,
final ExecutionContext context) {
// Item list
context.getLogger().info("Route parameters are: " + id);
// Convert and display
if (id == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client
// Generate document
final String jsonDocument = "{\"id\":\"" + id + "\", " +
"\"description\": \"" + name + "\"}";
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(jsonDocument)
.build();
}
}
PoJO-hoofdtekst lezen uit een POST-aanvraag
Hier volgt de code voor de ToDoItem
klasse waarnaar in dit voorbeeld wordt verwezen:
public class ToDoItem {
private String id;
private String description;
public ToDoItem(String id, String description) {
this.id = id;
this.description = description;
}
public String getId() {
return id;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return "ToDoItem={id=" + id + ",description=" + description + "}";
}
}
In dit voorbeeld wordt de hoofdtekst van een POST-aanvraag gelezen. De aanvraagbody wordt automatisch gedeserialiseerd in een ToDoItem
object en wordt geretourneerd naar de client, met inhoudstype application/json
. De ToDoItem
parameter wordt geserialiseerd door de Functions-runtime omdat deze is toegewezen aan de body
eigenschap van de HttpMessageResponse.Builder
klasse.
@FunctionName("TriggerPojoPost")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<ToDoItem>> request,
final ExecutionContext context) {
// Item list
context.getLogger().info("Request body is: " + request.getBody().orElse(null));
// Check request body
if (!request.getBody().isPresent()) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client
// Generate document
final ToDoItem body = request.getBody().get();
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(body)
.build();
}
}
In het volgende voorbeeld ziet u een TypeScript-functie voor een HTTP-trigger. De functie zoekt naar een name
parameter in de querytekenreeks of de hoofdtekst van de HTTP-aanvraag.
import { app, HttpRequest, HttpResponseInit, InvocationContext } from '@azure/functions';
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || (await request.text()) || 'world';
return { body: `Hello, ${name}!` };
}
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
handler: httpTrigger1,
});
In het volgende voorbeeld ziet u een JavaScript-functie voor een HTTP-trigger. De functie zoekt naar een name
parameter in de querytekenreeks of de hoofdtekst van de HTTP-aanvraag.
const { app } = require('@azure/functions');
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
handler: async (request, context) => {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || (await request.text()) || 'world';
return { body: `Hello, ${name}!` };
},
});
In het volgende voorbeeld ziet u een triggerbinding in een function.json-bestand en een PowerShell-functie. De functie zoekt naar een name
parameter in de querytekenreeks of de hoofdtekst van de HTTP-aanvraag.
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
}
]
}
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
$name = $Request.Body.Name
}
$body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
if ($name) {
$body = "Hello, $name. This HTTP triggered function executed successfully."
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})
In dit voorbeeld worden HTTP-streams gebruikt om gesegmenteerde antwoordgegevens te retourneren.
import time
import azure.functions as func
from azurefunctions.extensions.http.fastapi import Request, StreamingResponse
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
def generate_sensor_data():
"""Generate real-time sensor data."""
for i in range(10):
# Simulate temperature and humidity readings
temperature = 20 + i
humidity = 50 + i
yield f"data: {{'temperature': {temperature}, 'humidity': {humidity}}}\n\n"
time.sleep(1)
@app.route(route="stream", methods=[func.HttpMethod.GET])
async def stream_sensor_data(req: Request) -> StreamingResponse:
"""Endpoint to stream real-time sensor data."""
return StreamingResponse(generate_sensor_data(), media_type="text/event-stream")
Zie HTTP-streams voor meer informatie, waaronder het inschakelen van HTTP-streams in uw project.
In dit voorbeeld ziet u een triggerbinding en een Python-functie die gebruikmaakt van de binding. De functie zoekt naar een name
parameter in de querytekenreeks of de hoofdtekst van de HTTP-aanvraag.
import azure.functions as func
import logging
app = func.FunctionApp()
@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.ANONYMOUS)
def test_function(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
return func.HttpResponse(
"This HTTP triggered function executed successfully.",
status_code=200
)
Kenmerken
Zowel het geïsoleerde werkrolmodel als het in-procesmodel gebruiken om HttpTriggerAttribute
de triggerbinding te definiëren. C#-script maakt in plaats daarvan gebruik van een function.json configuratiebestand, zoals beschreven in de handleiding voor C#-scripts.
In geïsoleerde werkmodelfunctie-apps ondersteunt de HttpTriggerAttribute
volgende parameters:
Parameters | Beschrijving |
---|---|
AuthLevel | Bepaalt welke sleutels aanwezig moeten zijn in de aanvraag om de functie aan te roepen. Zie Autorisatieniveau voor ondersteunde waarden. |
Methoden | Een matrix van de HTTP-methoden waarop de functie reageert. Als deze niet is opgegeven, reageert de functie op alle HTTP-methoden. Zie het HTTP-eindpunt aanpassen. |
Route | Definieert de routesjabloon, waarmee wordt bepaald op welke aanvraag-URL's uw functie reageert. De standaardwaarde als er geen is opgegeven, is <functionname> . Zie het HTTP-eindpunt aanpassen voor meer informatie. |
Decorators
Is alleen van toepassing op het Python v2-programmeermodel.
Voor Python v2-functies die zijn gedefinieerd met behulp van een decorator, worden de volgende eigenschappen voor een trigger gedefinieerd in de route
decorator, waarmee HttpTrigger- en HttpOutput-binding wordt toegevoegd:
Eigenschappen | Beschrijving |
---|---|
route |
Route voor het HTTP-eindpunt. Als geen, wordt deze ingesteld op functienaam als deze aanwezig is of door de gebruiker gedefinieerde python-functienaam. |
trigger_arg_name |
Argumentnaam voor HttpRequest. De standaardwaarde is 'req'. |
binding_arg_name |
Argumentnaam voor HttpResponse. De standaardwaarde is '$return'. |
methods |
Een tuple van de HTTP-methoden waarop de functie reageert. |
auth_level |
Bepaalt welke sleutels aanwezig moeten zijn in de aanvraag om de functie aan te roepen. |
Zie de sectie Configuratie voor Python-functies die zijn gedefinieerd met behulp van function.json.
Aantekeningen
Gebruik in de Runtime-bibliotheek van Java-functies de aantekening httpTrigger , die de volgende instellingen ondersteunt:
Configuratie
Is alleen van toepassing op het Python v1-programmeermodel.
In de volgende tabel worden de eigenschappen uitgelegd die u kunt instellen voor het options
object dat aan de app.http()
methode is doorgegeven.
Eigenschappen | Beschrijving |
---|---|
authLevel | Bepaalt welke sleutels aanwezig moeten zijn in de aanvraag om de functie aan te roepen. Zie Autorisatieniveau voor ondersteunde waarden. |
Methoden | Een matrix van de HTTP-methoden waarop de functie reageert. Als deze niet is opgegeven, reageert de functie op alle HTTP-methoden. Zie het HTTP-eindpunt aanpassen. |
route | Definieert de routesjabloon, waarmee wordt bepaald op welke aanvraag-URL's uw functie reageert. De standaardwaarde als er geen is opgegeven, is <functionname> . Zie het HTTP-eindpunt aanpassen voor meer informatie. |
In de volgende tabel worden de eigenschappen van de triggerconfiguratie uitgelegd die u hebt ingesteld in het function.json-bestand , wat verschilt per runtimeversie.
In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.
function.json-eigenschap | Beschrijving |
---|---|
type | Vereist - moet worden ingesteld op httpTrigger . |
direction | Vereist - moet worden ingesteld op in . |
name | Vereist: de naam van de variabele die wordt gebruikt in functiecode voor de aanvraag- of aanvraagbody. |
authLevel | Bepaalt welke sleutels aanwezig moeten zijn in de aanvraag om de functie aan te roepen. Zie Autorisatieniveau voor ondersteunde waarden. |
Methoden | Een matrix van de HTTP-methoden waarop de functie reageert. Als deze niet is opgegeven, reageert de functie op alle HTTP-methoden. Zie het HTTP-eindpunt aanpassen. |
route | Definieert de routesjabloon, waarmee wordt bepaald op welke aanvraag-URL's uw functie reageert. De standaardwaarde als er geen is opgegeven, is <functionname> . Zie het HTTP-eindpunt aanpassen voor meer informatie. |
Gebruik
In deze sectie wordt beschreven hoe u uw HTTP-triggerfunctiebinding configureert.
De aantekening van HttpTrigger moet worden toegepast op een methodeparameter van een van de volgende typen:
- HttpRequestMessage<T>.
- Systeemeigen Java-typen, zoals int, tekenreeks, byte[].
- Null-waarden met optioneel.
- Elk normaal Java-objecttype (POJO).
Nettolading
Het invoertype trigger wordt gedeclareerd als een van de volgende typen:
Type | Description |
---|---|
HttpRequest | Gebruik van dit type vereist dat de app is geconfigureerd met ASP.NET Core-integratie in .NET Isolated. Hiermee hebt u volledige toegang tot het aanvraagobject en de algemene HttpContext. |
HttpRequestData | Een projectie van het aanvraagobject. |
Een aangepast type | Wanneer de hoofdtekst van de aanvraag JSON is, probeert de runtime deze te parseren om de objecteigenschappen in te stellen. |
Wanneer de triggerparameter van het type HttpRequestData
is of HttpRequest
, kunnen aangepaste typen ook worden gebonden aan andere parameters met behulp van Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute
. Voor het gebruik van dit kenmerk is versie 3.1.0 of hoger vereistMicrosoft.Azure.Functions.Worker.Extensions.Http
. Dit is een ander type dan het vergelijkbare kenmerk in Microsoft.AspNetCore.Mvc
. Wanneer u ASP.NET Core-integratie gebruikt, hebt u een volledig gekwalificeerde verwijzing of using
instructie nodig. In dit voorbeeld ziet u hoe u het kenmerk gebruikt om alleen de hoofdinhoud op te halen terwijl u nog steeds toegang hebt tot de volledige inhoud HttpRequest
, met behulp van ASP.NET Core-integratie:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using FromBodyAttribute = Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute;
namespace AspNetIntegration
{
public class BodyBindingHttpTrigger
{
[Function(nameof(BodyBindingHttpTrigger))]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
[FromBody] Person person)
{
return new OkObjectResult(person);
}
}
public record Person(string Name, int Age);
}
Het HTTP-eindpunt aanpassen
Wanneer u een functie voor een HTTP-trigger maakt, is de functie standaard adresseerbaar met een route van het formulier:
https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>
U kunt deze route aanpassen met behulp van de optionele route
eigenschap op de invoerbinding van de HTTP-trigger. U kunt elke web-API-routebeperking gebruiken met uw parameters.
De volgende functiecode accepteert twee parameters category
en id
in de route en schrijft een antwoord met behulp van beide parameters.
[Function("HttpTrigger1")]
public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post",
Route = "products/{category:alpha}/{id:int?}")] HttpRequestData req, string category, int? id,
FunctionContext executionContext)
{
var logger = executionContext.GetLogger("HttpTrigger1");
logger.LogInformation("C# HTTP trigger function processed a request.");
var message = String.Format($"Category: {category}, ID: {id}");
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
response.WriteString(message);
return response;
}
Routeparameters worden gedefinieerd met behulp van de route
instelling van de HttpTrigger
aantekening. De volgende functiecode accepteert twee parameters category
en id
in de route en schrijft een antwoord met behulp van beide parameters.
package com.function;
import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
public class HttpTriggerJava {
public HttpResponseMessage<String> HttpTrigger(
@HttpTrigger(name = "req",
methods = {"get"},
authLevel = AuthorizationLevel.FUNCTION,
route = "products/{category:alpha}/{id:int}") HttpRequestMessage<String> request,
@BindingName("category") String category,
@BindingName("id") int id,
final ExecutionContext context) {
String message = String.format("Category %s, ID: %d", category, id);
return request.createResponseBuilder(HttpStatus.OK).body(message).build();
}
}
Als voorbeeld definieert de volgende TypeScript-code een route
eigenschap voor een HTTP-trigger met twee parameters en id
category
. In het voorbeeld worden de parameters uit de aanvraag gelezen en worden de waarden in het antwoord geretourneerd.
import { app, HttpRequest, HttpResponseInit, InvocationContext } from '@azure/functions';
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
const category = request.params.category;
const id = request.params.id;
return { body: `Category: ${category}, ID: ${id}` };
}
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
route: 'products/{category:alpha}/{id:int?}',
handler: httpTrigger1,
});
De volgende JavaScript-code definieert bijvoorbeeld een route
eigenschap voor een HTTP-trigger met twee parameters en category
id
. In het voorbeeld worden de parameters uit de aanvraag gelezen en worden de waarden in het antwoord geretourneerd.
const { app } = require('@azure/functions');
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
route: 'products/{category:alpha}/{id:int?}',
handler: async (request, context) => {
const category = request.params.category;
const id = request.params.id;
return { body: `Category: ${category}, ID: ${id}` };
},
});
Als voorbeeld definieert de volgende code een route
eigenschap voor een HTTP-trigger met twee parameters en category
id
:
Routeparameters die zijn gedeclareerd in het function.json-bestand , zijn toegankelijk als een eigenschap van het $Request.Params
object.
$Category = $Request.Params.category
$Id = $Request.Params.id
$Message = "Category:" + $Category + ", ID: " + $Id
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $Message
})
De uitvoeringscontext van de functie wordt weergegeven via een parameter die is gedeclareerd als func.HttpRequest
. Met dit exemplaar kan een functie toegang krijgen tot parameters voor gegevensroute, querytekenreekswaarden en -methoden waarmee u HTTP-antwoorden kunt retourneren.
Zodra de routeparameters zijn gedefinieerd, zijn de routeparameters beschikbaar voor de functie door de methode aan te route_params
roepen.
import logging
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
category = req.route_params.get('category')
id = req.route_params.get('id')
message = f"Category: {category}, ID: {id}"
return func.HttpResponse(message)
Met deze configuratie is de functie nu adresseerbaar met de volgende route in plaats van de oorspronkelijke route.
https://<APP_NAME>.azurewebsites.net/api/products/electronics/357
Met deze configuratie kan de functiecode twee parameters in het adres, de categorie en de id ondersteunen. Zie Routering in ASP.NET Core voor meer informatie over hoe routeparameters worden getokend in een URL.
Standaard worden alle functieroutes voorafgegaan door api
. U kunt het voorvoegsel ook aanpassen of verwijderen met behulp van de extensions.http.routePrefix
eigenschap in uw host.json bestand. In het volgende voorbeeld wordt het api
routevoorvoegsel verwijderd met behulp van een lege tekenreeks voor het voorvoegsel in het host.json-bestand .
{
"extensions": {
"http": {
"routePrefix": ""
}
}
}
Routeparameters gebruiken
Routeparameters die het patroon van route
een functie hebben gedefinieerd, zijn beschikbaar voor elke binding. Als u bijvoorbeeld een route hebt gedefinieerd als "route": "products/{id}"
een tabelopslagbinding, kan de waarde van de {id}
parameter in de bindingsconfiguratie worden gebruikt.
De volgende configuratie laat zien hoe de {id}
parameter wordt doorgegeven aan de binding rowKey
.
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';
const tableInput = input.table({
connection: 'MyStorageConnectionAppSetting',
partitionKey: 'products',
tableName: 'products',
rowKey: '{id}',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
return { jsonBody: context.extraInputs.get(tableInput) };
}
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
route: 'products/{id}',
extraInputs: [tableInput],
handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');
const tableInput = input.table({
connection: 'MyStorageConnectionAppSetting',
partitionKey: 'products',
tableName: 'products',
rowKey: '{id}',
});
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
route: 'products/{id}',
extraInputs: [tableInput],
handler: async (request, context) => {
return { jsonBody: context.extraInputs.get(tableInput) };
},
});
{
"type": "table",
"direction": "in",
"name": "product",
"partitionKey": "products",
"tableName": "products",
"rowKey": "{id}"
}
Wanneer u routeparameters gebruikt, wordt er automatisch een invoke_URL_template
gemaakt voor uw functie. Uw clients kunnen de URL-sjabloon gebruiken om inzicht te hebben in de parameters die ze nodig hebben om de URL door te geven bij het aanroepen van uw functie met behulp van de URL. Navigeer naar een van uw door HTTP geactiveerde functies in Azure Portal en selecteer Functie-URL ophalen.
U kunt programmatisch toegang krijgen tot de invoke_URL_template
api's van Azure Resource Manager voor Lijstfuncties of Functie ophalen.
HTTP-streams
U kunt nu aanvragen naar en antwoorden van uw HTTP-eindpunt streamen in Node.js v4-functie-apps. Zie HTTP-streams voor meer informatie.
HTTP-streams
Met ondersteuning voor HTTP-streams in Python kunt u gegevens van uw HTTP-eindpunten accepteren en retourneren met behulp van FastAPI-aanvraag- en antwoord-API's die zijn ingeschakeld in uw functies. Met deze API's kan de host gegevens in HTTP-berichten verwerken als segmenten in plaats van dat een volledig bericht in het geheugen moet worden gelezen. Zie HTTP-streams in Python voor meer informatie
Belangrijk
Ondersteuning voor HTTP-streams voor Python is momenteel in preview en wordt alleen ondersteund voor het Python v2-programmeermodel.
Werken met clientidentiteiten
Als uw functie-app gebruikmaakt van App Service-verificatie/-autorisatie, kunt u informatie over geverifieerde clients bekijken vanuit uw code. Deze informatie is beschikbaar als aanvraagheaders die door het platform worden geïnjecteerd.
U kunt deze informatie ook lezen uit bindingsgegevens.
Notitie
Toegang tot geverifieerde clientgegevens is momenteel alleen beschikbaar voor .NET-talen. Het wordt ook niet ondersteund in versie 1.x van de Functions-runtime.
Informatie met betrekking tot geverifieerde clients is beschikbaar als een ClaimsPrincipal, die beschikbaar is als onderdeel van de aanvraagcontext, zoals wordt weergegeven in het volgende voorbeeld:
De geverifieerde gebruiker is beschikbaar via HTTP-headers.
De geverifieerde gebruiker is beschikbaar via HTTP-headers.
Autorisatieniveau
Het autorisatieniveau is een tekenreekswaarde die het type autorisatiesleutel aangeeft dat is vereist voor toegang tot het functie-eindpunt. Voor een door HTTP geactiveerde functie kan het autorisatieniveau een van de volgende waarden zijn:
Niveauwaarde | Beschrijving |
---|---|
anoniem | Er is geen toegangssleutel vereist. |
functie | Er is een functiespecifieke sleutel vereist voor toegang tot het eindpunt. |
admin | De hoofdsleutel is vereist voor toegang tot het eindpunt. |
Wanneer een niveau niet expliciet is ingesteld, wordt de autorisatie standaard ingesteld op het function
niveau.
Wanneer een niveau niet expliciet is ingesteld, is de standaardautorisatie afhankelijk van de versie van het Node.js-model:
Functietoegangssleutels
Met Functies kunt u toegangssleutels gebruiken om de toegang tot uw functie-eindpunten moeilijker te maken. Tenzij het autorisatieniveau voor een door HTTP geactiveerde functie is ingesteld anonymous
op, moeten aanvragen een toegangssleutel in de aanvraag bevatten. Zie Werken met toegangssleutels in Azure Functions voor meer informatie.
Autorisatie van toegangssleutels
Voor de meeste HTTP-triggersjablonen is een toegangssleutel in de aanvraag vereist. Uw HTTP-aanvraag ziet er normaal gesproken uit als de volgende URL:
https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?code=<API_KEY>
De sleutel kan worden opgenomen in een queryreeksvariabele met de naam code
, zoals eerder vermeld. Het kan ook worden opgenomen in een x-functions-key
HTTP-header. De waarde van de sleutel kan elke functiesleutel zijn die is gedefinieerd voor de functie of een hostsleutel.
U kunt anonieme aanvragen toestaan, waarvoor geen sleutels zijn vereist. U kunt ook vereisen dat de hoofdsleutel wordt gebruikt. U wijzigt het standaardautorisatieniveau met behulp van de authLevel
eigenschap in de bindingS-JSON.
Notitie
Wanneer u functies lokaal uitvoert, wordt autorisatie uitgeschakeld, ongeacht de opgegeven instelling voor autorisatieniveau. Na publicatie naar Azure wordt de authLevel
instelling in uw trigger afgedwongen. Sleutels zijn nog steeds vereist bij lokaal uitvoeren in een container.
Webhooks
Notitie
De webhookmodus is alleen beschikbaar voor versie 1.x van de Functions-runtime. Deze wijziging is aangebracht om de prestaties van HTTP-triggers in versie 2.x en hoger te verbeteren.
In versie 1.x bieden webhooksjablonen nog een validatie voor webhookpayloads. In versie 2.x en hoger werkt de basis-HTTP-trigger nog steeds en is dit de aanbevolen methode voor webhooks.
WebHooktype
De webHookType
bindingseigenschap geeft het type aan als de webhook wordt ondersteund door de functie, die ook de ondersteunde nettolading bepaalt. Het type webhook kan een van de volgende waarden zijn:
Typewaarde | Beschrijving |
---|---|
genericJson |
Een webhookeindpunt voor algemeen gebruik zonder logica voor een specifieke provider. Met deze instelling worden aanvragen beperkt tot alleen aanvragen die HTTP POST gebruiken en met het application/json inhoudstype. |
github |
De functie reageert op GitHub-webhooks. Gebruik de authLevel eigenschap niet met GitHub-webhooks. |
slack |
De functie reageert op Slack-webhooks. Gebruik de authLevel eigenschap niet met Slack-webhooks. |
Wanneer u de webHookType
eigenschap instelt, moet u de eigenschap niet ook instellen methods
voor de binding.
GitHub-webhooks
Als u wilt reageren op GitHub-webhooks, maakt u eerst uw functie met een HTTP-trigger en stelt u de eigenschap webHookType in op github
. Kopieer vervolgens de URL en API-sleutel naar de pagina Webhook toevoegen van uw GitHub-opslagplaats.
Slack-webhooks
De Slack-webhook genereert een token voor u in plaats van het op te geven, dus u moet een functiespecifieke sleutel configureren met het token van Slack. Zie Autorisatiesleutels.
Webhooks en sleutels
Webhookautorisatie wordt verwerkt door het webhookontvangeronderdeel, onderdeel van de HTTP-trigger en het mechanisme varieert op basis van het type webhook. Elk mechanisme is afhankelijk van een sleutel. Standaard wordt de functiesleutel met de naam 'standaard' gebruikt. Als u een andere sleutel wilt gebruiken, configureert u de webhookprovider om de sleutelnaam met de aanvraag op een van de volgende manieren te verzenden:
- Querytekenreeks: de provider geeft de sleutelnaam door in de
clientid
querytekenreeksparameter, zoalshttps://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?clientid=<KEY_NAME>
. - Aanvraagheader: de provider geeft de sleutelnaam door in de
x-functions-clientid
header.
Inhoudstypen
Als u binaire en formuliergegevens doorgeeft aan een niet-C#-functie, moet u de juiste inhoudstypeheader gebruiken. Ondersteunde inhoudstypen zijn onder andere octet-stream
voor binaire gegevens en typen met meerdere onderdelen.
Bekende problemen
In niet-C#-functies worden aanvragen verzonden met de inhoudstyperesultaten image/jpeg
in een string
waarde die aan de functie is doorgegeven. In dergelijke gevallen kunt u de string
waarde handmatig converteren naar een bytematrix om toegang te krijgen tot de onbewerkte binaire gegevens.
Limieten
De lengte van de HTTP-aanvraag is beperkt tot 100 MB (104.857.600 bytes) en de URL-lengte is beperkt tot 4 kB (4.096 bytes). Deze limieten worden opgegeven door het element van het httpRuntime
Web.config-bestand van de runtime.
Als een functie die gebruikmaakt van de HTTP-trigger niet binnen 230 seconden wordt voltooid, treedt er een time-out op en retourneert de Azure Load Balancer een HTTP 502-fout. De functie blijft actief, maar kan geen HTTP-antwoord retourneren. Voor langlopende functies raden we u aan asynchrone patronen te volgen en een locatie te retourneren waar u de status van de aanvraag kunt pingen. Zie Schaal en hosting - Verbruiksabonnement voor meer informatie over hoe lang een functie kan worden uitgevoerd.