Azure functions Azure函数C#通过列表<;字符串>;作为Http触发器(GET)上的参数
我想通过GET向Azure函数C#后端发送字符串集合 我的职能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) { 两者
[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参数
- 使用属性修饰标记输入和输出绑定
- 绑定表达式参数以获取触发器元数据
[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