【问题标题】:How to POST to an Azure Function (HTTP Trigger) via Postman?如何通过 Postman 发布到 Azure 函数(HTTP 触发器)?
【发布时间】:2021-07-03 09:07:05
【问题描述】:

我实现了一个 Azure 函数,利用 HTTP 触发器,与 SendGrid 集成。预期的操作是通过 HTTP 将数据传递到 Azure 函数,并通过电子邮件将该内容发送到指定的收件箱。我的 Azure 函数在 Azure 门户中成功测试。换句话说,当我提交这个时,收件箱会收到预期的电子邮件:

但是,当我尝试通过 Postman 发布到 Azure 函数时,我收到状态 400“错误请求 - 无效主机名”。我尝试使用我的功能键,将键作为参数传递到 Postman 的 URI 中,或者在标题中作为“x-functions-key”传递。始终状态为 400。我通过单击“获取函数 URL”从 Azure 门户获取要发布到的 URL。作为替代方案,我还尝试过发布到符合以下条件的 URL:

这是我的函数绑定(function.json):

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "sendGrid",
      "name": "$return",
      "direction": "out",
      "apiKey": "SendGridKey",
      "from": "email@email.com",
      "to": "email@email.com"
    }
  ]
}

这里是函数逻辑(run.csx):

#r "Newtonsoft.Json"
#r "SendGrid"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using SendGrid.Helpers.Mail;

public static SendGridMessage Run(Email req, ILogger log)
{
    Guid Id = Guid.NewGuid(); 
            
    log.LogInformation($"Email generated from websitename via Azure Function. Email ID: {Id}");    

    SendGridMessage message = new SendGridMessage()
    {
        Subject = $"From wesbitename. Subj: {req.Subject.Substring(0, 20)}"
    };

    
    message.AddContent("text/plain", $"Subject: {req.Subject} \n \n" + $"{req.Content} \n \n" + $"From: {req.CustomerName}, {req.CustomerEmail}");
    return message;
}

public class Email
{
    public string EmailId { get; set; }
    public string Subject { get; set; }
    public string Content { get; set; }
    public string CustomerName { get; set; }
    public string CustomerEmail { get; set; }
}

如何通过 HTTP POST 到 Azure Function?如何解决 400 错误?谢谢!

有关更多信息,我也在通过 twitter 寻求帮助:https://twitter.com/devbogoodski/status/1410702335303581697

【问题讨论】:

    标签: c# azure azure-functions postman


    【解决方案1】:

    由于您使用的是 HTTP 触发器,请确保您的 url 采用以下格式

    http://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>

    添加以下标题:

    x-functions-key: A function-specific API key is required. Default if specific is not provided
    Content-Type: application/json
    

    然后将你的 json 对象添加到正文中

    【讨论】:

    • 谢谢。这是一个有用的答案。它并没有解决我遇到的具体错误,而只是因为我在错误的地方——函数本身——寻找错误的根源,而错误实际上是在测试软件 Postman 上。鉴于我最初的问题,这是一个有用的答案。所以谢谢。赞成:)
    【解决方案2】:

    最终,我没有对 Azure Function 进行任何更改,而是尝试使用不同于 Postman 的工具进行测试。我用https://reqbin.com/。使用我一直在使用的相同 JSON 正文提交我的 POST 请求并收到状态代码 200,并且内容已通过电子邮件发送到指定的收件箱。所以,问题出在 Postman 身上——不过,在这一点上,我不知道到底是什么。我已经取消选择每个标题选项,除了我打算使用的那些。并通过 URL 中的查询字符串传递我的功能键,就像我在 Postman 之外的成功测试中所做的那样,但它在 Postman 中从未工作过。所以我不完全确定发生了什么。但是 Azure 功能正在运行。所以我认为这已经解决了。感谢您的关注。

    如果您对此感兴趣,我在此稍微扩展一下:https://bogoodski.medium.com/setting-up-an-azure-function-sendgrid-http-trigger-cfd9c5791201

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2021-01-25
      相关资源
      最近更新 更多