Миграция .NET Core 3.1 в .NET 5.0, функции AzureFunctions, Не может преобразовать входной параметр «req» в тип «System.Net.Http.HttpRequestMessage»

#c# #.net #azure-functions #.net-5 #.net-core-3.1

Вопрос:

Я нахожусь в процессе перехода с .NET Core 3.1 на .NET 5.0 для своего проекта функций Azure. У меня есть следующая функция деклерации:

 using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;

[Function("Test")]
public static async Task Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestMessage req, 
    ILogger log, 
    Microsoft.Azure.WebJobs.ExecutionContext context)
{
    ...
}

 

Однако я получаю следующее сообщение об ошибке:

 System.Private.CoreLib: Exception while executing function: Functions.SaveBlob. System.Private.CoreLib: Result: Failure
Exception: Microsoft.Azure.Functions.Worker.Diagnostics.Exceptions.FunctionInputConverterException: Error converting 1 input parameters for Function 'Test': Cannot convert input parameter 'req' to type 'System.Net.Http.HttpRequestMessage' from type 'Microsoft.Azure.Functions.Worker.GrpcHttpRequestData'.
 

Мне нужно сохранить ExecutionContext для моего приложения.

Как я могу исправить эту ошибку?

Ответ №1:

Прочитав документацию Microsoft о контексте выполнения, я вижу, что класс был переименован в FunctionContext

Решение проблемы было простым, переименуйте ExecutionContext в FunctionContext . Я понимаю, что Microsoft.Azure.WebJobs это не нужно для функций .NET 5 Azure. Затем мне нужно было изменить тип с System.Net.Http.HttpRequestMessage на Microsoft.Azure.Functions.Worker.Http.HttpRequestData . Наконец, я удалил ILogger в пользу метода getLogger.

Конечная функция выглядит так.

 using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;

[Function("Test")]
public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestData req
        FunctionContext context)
{
    ...
}
 

При обновлении обязательно внимательно прочитайте всю их документацию о новых изменениях. Это также помогло создать новый проект с помощью кода Visual Studio с использованием .NET 5, чтобы увидеть, как структурирован новый проект.