首页 > 解决方案 > 我的 HTTP 触发 Azure 函数如何将请求的参数直接传递给 Run 方法?

问题描述

我有以下由 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 方法,就像使用 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)
{
     // ...
} 

或者,在进行 POST 时:

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

标签: c#azure-functions

解决方案


参考Azure Functions HTTP 触发器和绑定:自定义 HTTP 终结点

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

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

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

您可以将任何Web API 路由约束与您的参数一起使用。

例如

Route = "v1/resource/{resourceId:int}"

默认情况下,所有函数路由都以api为前缀

以下使用带约束的参数

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

到目前为止我还没有找到关于FromBody属性使用的细节,但是下面的引用似乎很有成效

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

注意:强调我的

哪个应该涵盖

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

推荐阅读