stevenlam505 Ответов: 1

Как сделать веб-API принять почтовое сообщение с несколькими строки JSON


Код, над которым я работаю, - это API, который отправляет текстовое сообщение и электронную почту, когда генератор отключается. Когда генератор выключается, отправляется запрос post с именем машины, почтовым сообщением, списком электронных писем и списком телефонных номеров. Однако я не знаю, как отправить имя машины, почтовые сообщения, список электронных писем, телефонные номера в почтовый запрос и заставить почтовый запрос проанализировать список и отправить электронные письма и тексты. Я включил свой текущий код:

Что я уже пробовал:

Консольное приложение, которое отправляет сообщения:
static async Task SendPost(string machineName, string postMessage, List<string> emailAddresses, List<string> phoneNumbers)
{
    string url = "https://localhost:44312/GeneratorStatus/";
    HttpClient client = new HttpClient();

    string name = JsonConvert.SerializeObject(machineName);
    string post= JsonConvert.SerializeObject(postMessage);
    string emails = JsonConvert.SerializeObject(emailAddresses);
    string phones = JsonConvert.SerializeObject(phoneNumbers);

    var jsonMessage= JsonConvert.SerializeObject(new[] 
              {JsonConvert.DeserializeObject(name),
                                                  
               JsonConvert.DeserializeObject(post),
                                                  
               JsonConvert.DeserializeObject(emails),
                                                  
               JsonConvert.DeserializeObject(phones) });

    var response = await client.PostAsync(url, new StringContent(jsonMessage, 
    Encoding.UTF8, "application/json"));
    Console.WriteLine(response);
}


Мой контроллер API:
[HttpPost]
public void PostString([FromBody] string jsonString)
{
    emailList.SendEmail("fromEmail@gmail.com", <emails and phones> , <name>, <post>);
}


Мой вопрос заключается только в том, как мне отформатировать свой контроллер API, чтобы он мог принимать и анализировать информацию "jsonMessage", а затем форматировать ее так, как я хотел выше?

ZurdoDev

Если все данные поступают в jsonString, то вам просто нужно google c# десериализовать json string, и у вас будет много примеров того, как его анализировать.

Afzaal Ahmad Zeeshan

JSON просто существует, чтобы помочь вам с обменом данными между сервером и клиентским приложением. Если ваша клиентская часть содержит стиль, то ваш сервер также должен иметь его.

Я хотел бы рекомендовать использовать шаблоны электронной почты; либо пользовательские, либо предоставленные поставщиком почты. Они помогут вам во многих отношениях.

Да, и всегда старайтесь предотвратить HTML-контент, который не проверен на XSS и другие скрипты подделки, это приведет к большим неприятностям для вашего сервиса в будущем.

1 Ответов

Рейтинг:
10

Pete O'Hanlon

Проблема заключается в том, что вы пытаетесь скрыть сложный объект внутри простого представления. Вместо того чтобы передавать строку, вы должны создать контракт данных, который инкапсулирует сообщение электронной почты. Что-то вроде этого, возможно:

[DataContract]
public class EmailMessage
{
  [DataMember(Name = "MachineName", EmitDefaultValue = false)]
  public string MachineName { get; set; }
  [DataMember(Name = "MachineName", EmitDefaultValue = false)]
  public string PostMessage { get; set; }
  [DataMember(Name = "MachineName", EmitDefaultValue = false)]
  public List<string> EmailAddresses { get; set; }
  [DataMember(Name = "MachineName", EmitDefaultValue = false)]
  public List<string> PhoneNumbers { get; set; }
}
После этого вы используете EmailMessage для создания электронной почты в консольном приложении и изменения ResponseBody со строки на EmailMessage.


stevenlam505

Что "делает"ваше решение? Извините за вероятный глупый вопрос, я все еще очень новичок в C#. Моя главная цель в настоящее время состоит в том, чтобы переместить строку JSON в мой API с помощью этого
[HttpPost]
публичный список<string> PostString([FromBody] string input)
{
строки.Добавить(ввод);
возвращенная строка;
}
но когда я делаю строковый ввод [FromBody], я сталкиваюсь с ошибкой 400, но когда я удаляю часть [FromBody], она публикует, но входное значение равно нулю.

Pete O'Hanlon

Ваш API будет выглядеть примерно так:
[HttpPost]
public IActionResult Post([FromBody]EmailMessage email)
{
// сообщение электронной почты здесь должно соответствовать сообщению электронной почты, которое вы разместили в своей консоли
возврат ОК();
}

stevenlam505

Как отформатировать свой PostRequest в консольном приложении, чтобы он соответствовал заданным параметрам? А именно: "жду клиента.PostAsync" линии.