2017-10-14 3 views
1

Je suis nouveau dans Azure Functions et j'ai une question simple sur la façon de générer un Emplacement en-tête pour une ressource nouvellement créée. J'ai créé une fonction simple qui est utilisée pour créer une personne (original hein?).Azure Functions - comment retourner un en-tête de position

Dans mon exemple, j'utilise DocumentDB pour le stockage. Je souhaite renvoyer un en-tête Location au client pour qu'il puisse ensuite le dé-référencer s'il le souhaite, mais pour ce faire, je dois connaître le routage.

Mon code est le suivant ...

public static class PersonProcessing 
{ 
    [FunctionName("person")] 
    public static async Task<HttpResponseMessage> Create(
     [HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequestMessage req, 
     [DocumentDB("Test", "People", CreateIfNotExists = true)]ICollector<Person> outTable, 
     TraceWriter log) 
    { 
     var tx = await req.Content.ReadAsAsync<Person>(); 

     tx.Id = Guid.NewGuid(); 

     outTable.Add(tx); 

     var response = req.CreateResponse(HttpStatusCode.Created, tx); 
     response.Headers.Location = new Uri($"{req.RequestUri}/{tx.Id}"); 
     return response; 
    } 

    public class Person 
    { 
     [JsonProperty("id")] 
     public Guid Id { get; set; } 

     public string Name { get; set; } 
    } 
} 

J'ai créé l'en-tête de localisation basé sur la entrant RequestUri, mais est-il une meilleure (ou plus standard) façon de le faire avec les fonctions Azure ?

Est-ce que ce que j'ai fait ici accepté la sagesse - je ne trouve pas de ressources utiles sur le web d'où ma question?

Merci d'avance pour vos réponses.

Répondre

2

Je ne connais pas d'une manière différente, et il n'y a rien de mal avec ce que vous avez. Il utilise le modèle standard HttpResponseMessage plutôt que d'inventer une manière différente de le faire. Généralement, les fonctions déclenchées par http utilisent simplement les paradigmes standards quand il s'agit de traiter la requête request.

+0

Merci pour la réponse rapide David, ça va faire pour moi. –