Création d'une nouvelle fonction Azure dans Visual Studio 2017 (basée sur HTTPTrigger) et ayant des difficultés à transmettre des paramètres avec un itinéraire personnalisé. Ci-dessous l'extrait de code:
[FunctionName("RunTest")]
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "orchestrators/contoso_function01/{id:int}/{username:alpha}")]
HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
// parse query parameter
string name = req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "id", true) == 0)
.Value;
string instanceId = req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "username", true) == 0)
.Value;
if (name == null)
{
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
name = data?.name;
}
return name == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}
J'ai essayé d'accéder à la fonction avec l'URL ci-dessous, mais je n'ai pas pu récupérer les valeurs ID ou UserName de la chaîne de requête à l'aide de l'API GetQueryNameValuePairs (), car elle ne contient que 0 éléments dans la collection:
http: // localhost: 7071/api/orchestrators/contoso_function01/123/abchttp: // localhost: 7071/api/orchestrators/contoso_function01 /? id = 123 & username = abc =
Je ne sais pas si c'est la bonne façon de gérer un tel besoin de passer des paramètres pour les requêtes HTTP avec Azure Functions, mais si j'inclus des paramètres pour chacune des chaînes de requête avec des noms de paramètres correspondants (ce qui est apparemment obligatoire pour que les liaisons fonctionnent), il est automatiquement attribué avec la valeur transmise dans l'URL au paramètre respectif.
[FunctionName("HttpRunSingle")]
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "orchestrators/contoso_function01/{id:int}/{username:alpha}")]
HttpRequestMessage req, int id, string username,TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
return (id == 0 || string.IsNullOrEmpty(username))
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "Hello " + id + " " + username);
}
vous pouvez le faire comme:
var query = System.Web.HttpUtility.ParseQueryString(req.RequestUri.Query);
string userid = query.Get("username");