簡體   English   中英

WebAPI控制器看不到價值

[英]WebAPI controller don't see value

我有sendemail控制器

這是接口代碼

  public interface IEmailService
   {
       Task SendEmail(string email, string subject, string message);
   }

這是API控制器

 [Route("api/send-email")]
[ApiController]
public class EmailController : ControllerBase
{
    private readonly IEmailService _emailService;
    public EmailController(IEmailService emailService)
    {
        _emailService = emailService;
    }

    [HttpPost]
    public async Task<IActionResult> SendEmailAsync(string email, string subject, string message)
    {
        await _emailService.SendEmail(email, subject, message);
        return Ok();
    }

}

這是SendEmail類的代碼

public class EmailService: IEmailService
{
    private readonly IConfiguration _configuration;
    public EmailService(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public async Task SendEmail(string email, string subject, string message)
    {
        using (var client = new SmtpClient())
        {
            var credential = new NetworkCredential
            {
                UserName = _configuration["Email:Email"],
                Password = _configuration["Email:Password"]
            };

            client.Credentials = credential;
            client.Host = _configuration["Email:Host"];
            client.Port = int.Parse(_configuration["Email:Port"]);
            client.EnableSsl = true;

            using (var emailMessage = new MailMessage())
            {
                emailMessage.To.Add(new MailAddress(email));
                emailMessage.From = new MailAddress(_configuration["Email:Email"]);
                emailMessage.Subject = subject;
                emailMessage.Body = message;
                client.Send(emailMessage);
            }
        }
        await Task.CompletedTask;
    }
}

我嘗試通過郵遞員檢查發布請求並將此json發送到此URL- https://localhost:5001/api/send-email

{“ email”:“ suhomlin.eugene93@gmail.com”,“ subject”:“ Get Medicine”,“ message”:null}

但是我收到錯誤消息,該電子郵件為空。 這是錯誤的畫面

在此處輸入圖片說明

我不明白,為什么? 我的錯誤在哪里?

我認為POST請求的綁定方式與您期望GET請求默認綁定的方式不同。 您可以執行以下兩項操作:

1)創建一個請求對象,而不是3個字符串

public class SendEmailRequest
{
    public string Email {get; set;}
    ...
}

2)按照評論中的建議執行FromBody

我建議使用前者,這是我認為的一種更簡潔的方法,因此我在應用程序中使用了該方法。

嘗試修改,為API創建具有數據屬性的實體類:

public class Data
{
  public string email {get;set;}
  public string subject {get;set;}
  public string message {get;set;}
}

現在,如下更改API服務:

[HttpPost]
    public async Task<IActionResult> SendEmailAsync([FromBody] Data d)
    {
        await _emailService.SendEmail(d.email, d.subject, d.message);
        return Ok();
    }

現在,您的郵遞員服務將按預期工作,從Request Body接收數據

編輯1

以下是其他選項,以防您熱衷於使用查詢字符串發送數據:

  1. public async Task<string> SendEmailAsync(string email, string subject, string message)

  2. public async Task<string> SendEmailAsync([FromUri]Data d)

在以上兩種情況下,以下查詢均有效:

https://localhost:5001/api/send-email?subject=Get Medicine&email=suhomlin.eugene93@gmail.com

盡管第一個優先級高,請注意,我沒有在參數中傳遞消息,因為它在您原始查詢中的空值和命令或參數可以是任何東西。

正如討論中所建議的那樣,如果Data沒有明確限定,則它期望Json數據作為Http Request Body

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM