Я реализовал функцию Azure, используя триггер HTTP, интегрированный с SendGrid. Предполагаемое действие — передать данные в функцию Azure через HTTP и отправить это содержимое по электронной почте в указанный почтовый ящик. Моя функция Azure прошла успешное тестирование на портале Azure. Другими словами, когда я отправляю это, в папку «Входящие» приходит ожидаемое электронное письмо:
.Однако при попытке отправить POST в функцию Azure через Postman я получаю статус 400 «Неверный запрос — недопустимое имя хоста». Я попытался использовать свои функциональные клавиши, передав ключ в качестве параметра в моем URI в Postman и, альтернативно, в заголовке как «x-functions-key». Всегда статус 400. Я получаю URL-адрес для POST с портала 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; }
}
Как выполнить POST в функцию Azure через HTTP? Как устранить ошибку 400? Спасибо!
Для получения дополнительной информации я обращаюсь за помощью также через твиттер: https://twitter.com/devbogoodski/status/1410702335303581697
Спасибо. Это полезный ответ. Это не устраняет конкретную ошибку, с которой я столкнулся, но только потому, что я искал не то место - саму функцию - для источника ошибки, когда ошибка была на самом деле с программным обеспечением для тестирования Postman. Учитывая мой первоначальный вопрос, это полезный ответ. Так что спасибо тебе. Проголосовал :)