[英]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
以下是其他選項,以防您熱衷於使用查詢字符串發送數據:
public async Task<string> SendEmailAsync(string email, string subject, string message)
或
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.