我的HTTP触发Azure功能如何将请求的参数直接传递给Run方法?

Kzr*_*tof 3 c# azure-functions

我有一个HTTP调用触发的以下Azure功能:

public static class MyAzureFunction
{
    [FunctionName("api/v1/resource/")]
    public static async Task Run([HttpTrigger(AuthorizationLevel.Function, "get")]HttpRequestMessage request, ILogger logger)
    {
        // Extract query string params from the request...
    } 
}
Run Code Online (Sandbox Code Playgroud)

我希望将参数自动传递给Run方法,就像使用ASP.NET Core Web API一样,而不必从请求本身中提取它们并解析它们.

这是我想要得到的一个例子:

[FunctionName("api/v1/resource/{resourceId}")]
public static async Task Run([HttpTrigger(AuthorizationLevel.Function, "get")]HttpRequestMessage request, ILogger logger, int resourceId)
{
     // ...
} 
Run Code Online (Sandbox Code Playgroud)

或者,在做POST时:

[FunctionName("api/v1/resource/")]
public static async Task Run([HttpTrigger(AuthorizationLevel.Function, "post")]HttpRequestMessage request, ILogger logger, [FromBody] SomeEntityModel entityModel)
{
         // ...
}
Run Code Online (Sandbox Code Playgroud)

Nko*_*osi 6

参考Azure功能HTTP触发器和绑定:自定义HTTP端点

对于GET,您可以使用Route触发器上的attribute属性为该函数设置路由模板

定义路由模板,控制您的函数响应的请求URL.如果没有提供,则为默认值<functionname>

这允许功能代码支持地址中的参数,例如{resourceId}.

您可以将任何Web API Route Constraint与您的参数一起使用.

例如

Route = "v1/resource/{resourceId:int}"
Run Code Online (Sandbox Code Playgroud)

默认情况下,所有的功能路由前缀API

以下使用带约束的参数

[FunctionName("MyFunctionName")]
public static async Task Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "v1/resource/{resourceId:int}")]
    HttpRequestMessage request, 
    ILogger logger, 
    int resourceId) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我还没有找到有关FromBody属性使用的详细信息,但以下引用似乎很有成效

对于C#和F#函数,您可以将触发器输入的类型声明HttpRequestMessage为自定义类型或自定义类型.如果选择HttpRequestMessage,您将获得对请求对象的完全访问权限.对于自定义类型,运行时尝试解析JSON请求主体以设置对象属性.

注意:强调我的

哪个应该涵盖

[FunctionName("MyPOSTFunction")]
public static async Task Run(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = "v1/resource/" )]
    SomeEntityModel entityModel, 
    ILogger logger) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)