Azure functions Azure函数C#通过列表<;字符串>;作为Http触发器(GET)上的参数

Azure functions Azure函数C#通过列表<;字符串>;作为Http触发器(GET)上的参数,azure-functions,Azure Functions,我想通过GET向Azure函数C#后端发送字符串集合 我的职能 [FunctionName("GetColl")] public async Task<string> TestColl( [HttpTrigger(AuthorizationLevel.Function, "get", Route = "blah")] TestRequest request) { 两者

我想通过GET向Azure函数C#后端发送字符串集合

我的职能

    [FunctionName("GetColl")]
    public async Task<string> TestColl(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = "blah")]
        TestRequest request)
    {
两者都失败了


我当然可以将其作为POST方法,但我希望将其保留为我们服务中的GET EXPORTED REST端点

如果您想以您描述的方式发送它,可以这样做:

公共静态类函数1
{
[功能名称(“功能1”)]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,Route=null)]HttpRequest请求,
ILogger日志)
{
LogInformation(“C#HTTP触发器函数处理了一个请求。”);
字符串inputString=req.Query[“Fields”];
var listStrings=inputString.Split(',').ToList();
string requestBody=等待新的StreamReader(req.Body).ReadToEndAsync();
动态数据=JsonConvert.DeserializeObject(requestBody);
inputString=inputString??数据?字段;
string responseMessage=string.IsNullOrEmpty(inputString)
?“此HTTP触发的函数已成功执行。请在查询字符串或请求正文中为个性化响应传递名称。”
:$“结果为-{inputString}。此HTTP触发的函数已成功执行。”;
返回新的OkObjectResult(responseMessage);
}
}

azure函数C#类库开发的方法签名只能包括以下内容:

  • 用于日志记录的ILogger或TraceWriter(仅v1版本)
  • 用于正常关机的CancellationToken参数
  • 使用属性修饰标记输入和输出绑定
  • 绑定表达式参数以获取触发器元数据
请查看此链接以查看更多详细信息

TL;博士:

自定义绑定也可用。虽然
[FromQuery]
与AspNetCore不同,它不是一个有效的函数本机绑定,但我们可以自己创建一个

首先,让我们创建一个用于函数绑定的属性:

[绑定]
[AttributeUsage(AttributeTargets.Parameter)]
公共类FromQueryAttribute:属性
{
}
当我们将
[Binding]
属性与函数中的参数绑定一起使用时,它是必需的

绑定在函数App启动时解决:

  • 查找所有函数(使用
    [FunctionName]
    修饰的任何方法)
  • 解析方法签名中使用的参数的绑定
  • 使用属性修饰绑定时,将使用特定的绑定规则解析绑定的数据输出。可以使用
    IExtensionConfigProvider
    配置此绑定规则:

    [扩展(“FromQuery”)]
    QueryConfigProvider中的公共类:IExtensionConfigProvider
    {
    私有只读IBindingProvider\u BindingProvider;
    来自QueryConfigProvider(来自QueryBindingProvider bindingProvider)的公共
    {
    _BindingProvider=BindingProvider;
    }
    公共void初始化(ExtensionConfigContext上下文)
    {
    context.AddBindingRule().Bind(\u BindingProvider);
    }
    }
    
    初始化
    在启动过程中调用一次。我们使用它为我们创建的
    FromQueryAttribute
    声明绑定规则,并使用
    Bind
    方法为其声明特定的绑定提供程序。
    [Extension]
    属性是必需的,因为WebJobs使用它来区分此特定扩展与其他扩展

    IBindingProvider
    保存有关函数及其方法签名的一些信息;在本例中,我们需要参数信息,该信息与绑定提供程序的上下文一起提供,
    BindingProviderContext

    QueryBindingProvider中的公共类:IBindingProvider { 来自QueryBinding的私有只读绑定; 公共FromQueryBindingProvider(fromQueryBindingBinding) { _绑定=绑定; } 公共任务TryCreateAsync(BindingProviderContext上下文) { _Binding.Parameter=context.Parameter; 返回Task.FromResult(_绑定为IBinding); } }
    TryCreateAsync
    方法在启动期间也会调用一次,用于声明调用函数时要使用的特定绑定

    绑定本身必须实现
    IBinding
    ,并且每次函数调用使用一次。
    IBinding
    保存与当前调用相关的信息。
    BindAsync
    方法在每次函数调用时调用一次,其
    BindingContext
    是当前调用的所有绑定数据的可用位置。可用数据因触发器类型而异。对于
    HttpTrigger
    ,它将始终包含http请求、头字典和查询字典。但是,查询字典是在不考虑可能的数组值的情况下解析的:包含
    key=1&key=2
    的查询字符串将解析为
    key=>2
    (始终选择最后一个),而不是
    var=>[1,2]
    ,这是我们所做的唯一原因

    来自QueryBinding的公共类:IBinding { 来自QueryValueProvider的私有只读\u ValueProvider; 公共bool fromtattribute{get;} 公共参数信息?参数{get;set;} public FromQueryBinding(fromQueryValue提供程序值提供程序) { _ValueProvider=ValueProvider; } 公共任务BindAsync(对象值、ValueBindingContext上下文) { 抛出新的NotImplementedException(); } 公共任务BindAsync(BindingContext上下文) { if(参数为空) 抛出新ArgumentNullException(nameof(Parameter)); _ValueProvider.Type=Parameter.ParameterType; _ValueProvider.ParameterName=参数.Name; 返回Task.FromResult(_ValueProvider作为IValu
     {
        public List<string> Fields { get;set; }
     }
    
     http://localhost:7101/api/blah?Fields="xxx"&Fields="yyy"
     http://localhost:7101/api/blah?Fields=x,y