如何创建可以在正文上执行模型绑定的POST Azure功能?

问题描述 投票:0回答:1

使用GET,我可以在函数定义中添加一个参数:

[FunctionName("GetKittenById")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "GetKittenById/{kittenId}")] HttpRequest req,
    string kittenId,
    ILogger log) { ... }

我想用POST做同样的事情。但是,如果我添加一个参数并执行此操作:

[FunctionName("CreateKitten")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "POST", Route = "CreateKitten")] HttpRequest req,
    Kitten kitten,
    ILogger log) { ... }

然后我的函数在POST时发出错误。

[07/03/2019 16:17:00]发生了未处理的主机错误。 [07/03/2019 16:17:00] Microsoft.Azure.WebJobs.Host: 无法从Azure WebJobs SDK调用“CreateKitten”。是否缺少Azure WebJobs SDK属性?

我在谷歌上找不到如何做到这一点。我假设有内置绑定,因为当你执行GET时,你可以指定是否需要JSON或XML。我想反过来做同样的事情,让框架处理它,以防他们发布JSON或XML。

有没有办法自动执行此操作,还是我必须开始在HttpRequest和反序列化内容?


我发现你可以用HttpRequest req替换Kitten kitten并且它将进行模型绑定,但我需要继续访问HttpRequest以便能够读取一些自定义身份验证标头。

有没有办法在不滚动我自己的情况下获得这两个?检查他们是否发送了JSON或XML并编写我自己的代码来进行模型绑定是一件痛苦的事情,这样我才能检索到http上下文。

post azure-functions
1个回答
1
投票

您可以通过将Http Request替换为Http Trigger绑定本身所需的类型来实现,如下所示,

enter image description here

如果您还想从HttpRequest获取标头,则将HttpRequest类型添加为另一个参数并读取如下所示的标头值。在这里,我在POST期间添加了一个标题“custom-header”,并从HttpRequest对象中读取它。 Request Body将自动解析为Kitten类型

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.