从 Az Function .net5 中的查询字符串输入的字符串数组

String array input from query string in Az Function .net5

前几天将我的 Azure Function 迁移到 .net5,现在我正在为基本的输入绑定问题苦苦挣扎。

我的查询=> /api/query?sgtins=foo1&sgtins=foo2

在 3.1 版中,一个简单的 req.Query["sgtins"] 就可以完成这项工作。但是现在在 .net5 上我不知道。使用字符串、整数等很好,但只要我使用 IEnumerable,它就会在运行时崩溃。有任何想法吗?目前关于 .net5 的文档很可怜:(

这是我的演示代码。如上所述使用 url。

这里是例外;

[2021-06-14T08:34:53.015Z] 已执行 'Functions.QueryProductEntities'(失败,Id=5f33b8ab-fdb2-483c-93fc-6dac3bb25ddc,持续时间=531ms) [2021-06-14T08:34:53.015Z] System.Private.CoreLib:执行函数时出现异常:Functions.QueryProductEntities。 System.Private.CoreLib:结果:失败 [2021-06-14T08:34:53.015Z] 异常:Microsoft.Azure.Functions.Worker.Diagnostics.Exceptions.FunctionInputConverterException:转换函数 'QueryProductEntities' 的 1 个输入参数时出错:无法将输入参数 'sgtins' 转换为类型 'System.Collections.Generic.IEnumerable`1[[System.String, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]'输入 'System.String'。 [2021-06-14T08:34:53.015Z] 在 Microsoft.Azure.Functions.Worker.Context.Features.DefaultModelBindingFeature.BindFunctionInput(FunctionContext 上下文)在 D:\a\s\src\DotNetWorker.Core\Context\Features\DefaultModelBindingFeature.cs:line 70 [2021-06-14T08:34:53.015Z] 在 Microsoft.Azure.Functions.Worker.Invocation.DefaultFunctionExecutor.ExecuteAsync(FunctionContext 上下文)在 D:\a\s\src\DotNetWorker.Core\Invocation\DefaultFunctionExecutor.cs:line 37 [2021-06-14T08:34:53.015Z] at Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a\s\src\DotNetWorker.Core\OutputBindings\OutputBindingsMiddleware.cs:line 13 [2021-06-14T08:34:53.015Z] 在 Microsoft.Azure.Functions.Worker.GrpcWorker.InvocationRequestHandlerAsync(InvocationRequest 请求、IFunctionsApplication 应用程序、IInvocationFeaturesFactory invocationFeaturesFactory、ObjectSerializer 序列化程序、IOutputBindingsInfoProvider outputBindingsInfoProvider)在 D:\a\s\src\DotNetWorker.Grpc\GrpcWorker.cs :第166行 [2021-06-14T08:34:53.015Z] 堆栈:位于 D:\a\s\src\DotNetWorker.Core\Context\Features\DefaultModelBindingFeature.cs:line 70 中的 Microsoft.Azure.Functions.Worker.Context.Features.DefaultModelBindingFeature.BindFunctionInput(FunctionContext 上下文) [2021-06-14T08:34:53.015Z] 在 Microsoft.Azure.Functions.Worker.Invocation.DefaultFunctionExecutor.ExecuteAsync(FunctionContext 上下文)在 D:\a\s\src\DotNetWorker.Core\Invocation\DefaultFunctionExecutor.cs:line 37 [2021-06-14T08:34:53.015Z] at Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a\s\src\DotNetWorker.Core\OutputBindings\OutputBindingsMiddleware.cs:line 13 [2021-06-14T08:34:53.015Z] 在 Microsoft.Azure.Functions.Worker.GrpcWorker.InvocationRequestHandlerAsync(InvocationRequest 请求、IFunctionsApplication 应用程序、IInvocationFeaturesFactory invocationFeaturesFactory、ObjectSerializer 序列化程序、IOutputBindingsInfoProvider outputBindingsInfoProvider)在 D:\a\s\src\DotNetWorker.Grpc\GrpcWorker.cs : 第 166 行。

使用Microsoft.AspNetCore.WebUtilities.QueryHelpers解析HttpRequestData.Uri得到查询参数

 var queryDictionary = 
    Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(req.Uri.Query);

现在使用上面的字典,您可以获取值集合作为

var sgtins = queryDictionary["sgtins"];

这里 sgtinsStringValues 结构的类型。检查 StringValues.