Zac*_*ach 5 c# azure azure-webjobs .net-core
我有一个 Azure Functions 应用程序。
我很惊讶地发现,在定义 Azure WebJob 函数时,HttpTriggerAttribute 不必应用于 HttpRequest 参数。
因此,虽然这是有效的,并且与大多数教程和示例相匹配,
[FunctionName("get")]
public async Task<IActionResult> Get(
[HttpTrigger(AuthorizationLevel.Anonymous, nameof(HttpMethods.Get), Route = "api/get")]HttpRequest httpRequest)
Run Code Online (Sandbox Code Playgroud)
这也是有效的,
[FunctionName("post")]
public async Task<IActionResult> Post(
[HttpTrigger(AuthorizationLevel.Anonymous, nameof(HttpMethods.Post), Route = "api/post")]MyType body)
Run Code Online (Sandbox Code Playgroud)
由于该属性未绑定到 HttpRequest 参数,因此我很惊讶该属性是参数属性而不是方法属性,例如,
[FunctionName("post")]
[HttpTrigger(AuthorizationLevel.Anonymous, nameof(HttpMethods.Post), Route = "api/post")]
public async Task<IActionResult> Post(MyType body)
Run Code Online (Sandbox Code Playgroud)
为什么 HttpTriggerAttribute 被实现为参数属性而不是像 FunctionNameAttribute 这样的方法属性?
对于C#类库开发,FunctionName充当标记,将方法标记为函数入口点。它不涉及函数的输入。然而,触发属性不同。它不仅具有标记Function类型的功能,还具有将输入数据绑定到方法参数的作用。处理该方法时需要这些数据。您可以将触发器属性视为“direction in”类型的绑定。这种类型的绑定需要在C#类库的开发方法中作为参数输入。“direction out”类型的绑定在函数外部定义为输出。其特点亦是如此。
标准 C# 类库函数示例:https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-example#class-library-example