Передача параметра в функцию Azure (HttpTrigger) в URL в виде строки запроса - PullRequest
0 голосов
/ 12 февраля 2019

Создана новая функция Azure в Visual Studio 2017 (на основе HTTPTrigger) и возникла проблема с передачей параметров с помощью пользовательского маршрута.Ниже приведен фрагмент кода:

        [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);
        }

Попытка получить доступ к функции по указанным ниже URL-адресам, но не смогла получить значения ID или UserName из строки запроса с помощью API GetQueryNameValuePairs (), поскольку в нем только 0 элементов.в коллекции:

http://localhost:7071/api/orchestrators/contoso_function01/123/abc http://localhost:7071/api/orchestrators/contoso_function01/?id=123&username=abc

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

вы можете сделать это как:

var query = System.Web.HttpUtility.ParseQueryString(req.RequestUri.Query);
string userid = query.Get("username");
0 голосов
/ 12 февраля 2019

Не уверен, что это правильный способ справиться с такой необходимостью передачи параметров для HTTP-запросов с помощью функций Azure, но если я включу параметры для каждой строки запроса с совпадающими именами параметров (что, очевидно, является обязательным для получения привязокwork), ему автоматически присваивается значение, переданное в URL соответствующему параметру.

         [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);
        }
...