Функции Azure локальной разработки HttpRequestMessage не содержат определения для GetQueryNameValuePairs.

У меня возникают проблемы при локальном запуске функции Azure, которая работает на портале. Я создал триггер C# Http по умолчанию в Azure, а затем загрузил содержимое приложения для локального запуска.

[5/22/18 9:03:21 PM] run.csx(8,23): error CS1061: 'HttpRequestMessage' does not contain a definition for 'GetQueryNameValuePairs' and no extension method 'GetQueryNameValuePairs' accepting a first argument of type 'HttpRequestMessage' could be found (are you missing a using directive or an assembly reference?)
[5/22/18 9:03:21 PM] run.csx(20,15): error CS1501: No overload for method 'CreateResponse' takes 2 arguments

Функция отлично работает на портале.

1 ответ

Как сказал @Mikhail, это вызвано неправильной версией функций основных инструментов (CLI). Код, который вы загружаете, работает с CLI v1 (.Net Framework), в то время как v2(возможно, вы установили) находится на.NET Core.

Для установки необходимого CLI выполните установку CLI. Если локальная ОС (например, MacOS) не поддерживает CLI v1, мы можем обратиться к CLI v2, который может работать кроссплатформенно. В CLI v2 код v1, созданный на портале, не может быть использован, поэтому нам нужно создать функции локально или изменить время выполнения приложения-функции портала на ~2, а затем снова создать и загрузить.

Обратите внимание, что перед тем, как мы изменим среду выполнения, приложение функции должно быть пустым, потому что функции, созданные до этого, зависят от другой среды выполнения и обычно становятся недействительными после изменения.

Чтобы дать конкретный пример кода, который работает, ниже будет работать в Функции v2:

public static async Task<HttpResponseMessage> Run(
       [HttpTrigger(AuthorizationLevel.Function, "get", "post", 
        Route = null)] HttpRequest req, ILogger log)
{

       int id;
       bool parsedId = int.TryParse(req.Query["id"], out id);
       ...
}
Другие вопросы по тегам