【问题标题】:String array input from query string in Az Function .net5来自 Az Function .net5 中查询字符串的字符串数组输入
【发布时间】:2021-06-14 09:13:23
【问题描述】:

前几天将我的 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 context) 在 D:\a\1\s\src\DotNetWorker.Core\Context\ Features\DefaultModelBindingFeature.cs:第 70 行 [2021-06-14T08:34:53.015Z] 在 D:\a\1\s\src\DotNetWorker.Core\Invocation\DefaultFunctionExecutor 中的 Microsoft.Azure.Functions.Worker.Invocation.DefaultFunctionExecutor.ExecuteAsync(FunctionContext context)。 CS:第 37 行 [2021-06-14T08:34:53.015Z] 在 Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) 在 D:\a\1\s\src\DotNetWorker.Core\OutputBindings \OutputBindingsMiddleware.cs:第 13 行 [2021-06-14T08:34:53.015Z] 在 Microsoft.Azure.Functions.Worker.GrpcWorker.InvocationRequestHandlerAsync(InvocationRequest 请求,IFunctionsApplication 应用程序,IInvocationFeaturesFactory invocationFeaturesFactory,ObjectSerializer 序列化程序,IOutputBindingsInfoProvider outputBindingsInfoProvider)在 D:\a\1\s\ src\DotNetWorker.Grpc\GrpcWorker.cs:第 166 行 [2021-06-14T08:34:53.015Z] 堆栈:位于 D:\a\1\s\src\DotNetWorker.Core\ 中的 Microsoft.Azure.Functions.Worker.Context.Features.DefaultModelBindingFeature.BindFunctionInput(FunctionContext context) Context\Features\DefaultModelBindingFeature.cs:第 70 行 [2021-06-14T08:34:53.015Z] 在 D:\a\1\s\src\DotNetWorker.Core\Invocation\DefaultFunctionExecutor 中的 Microsoft.Azure.Functions.Worker.Invocation.DefaultFunctionExecutor.ExecuteAsync(FunctionContext context)。 CS:第 37 行 [2021-06-14T08:34:53.015Z] 在 Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) 在 D:\a\1\s\src\DotNetWorker.Core\OutputBindings \OutputBindingsMiddleware.cs:第 13 行 [2021-06-14T08:34:53.015Z] 在 Microsoft.Azure.Functions.Worker.GrpcWorker.InvocationRequestHandlerAsync(InvocationRequest 请求,IFunctionsApplication 应用程序,IInvocationFeaturesFactory invocationFeaturesFactory,ObjectSerializer 序列化程序,IOutputBindingsInfoProvider outputBindingsInfoProvider)在 D:\a\1\s\ src\DotNetWorker.Grpc\GrpcWorker.cs:166 行。

【问题讨论】:

    标签: azure-functions .net-5 inputbinding


    【解决方案1】:

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

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

    现在使用上面的字典你可以获取值集合

    var sgtins = queryDictionary["sgtins"];
    

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

    【讨论】:

    • 谢谢先生!那行得通!很奇怪,这个基本的输入绑定在功能上并不是开箱即用的。
    • 您可以通过将查询参数添加到函数参数列表来访问它们。 stackoverflow.com/a/69256872/6332983
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2019-10-28
    • 2021-04-13
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多