我有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发送到此网址-https://localhost:5001/api/send-email
{ “电子邮件”:“ suhomlin.eugene93@gmail.com”, “主题”:“吃药”, “消息”:null }
但是我收到错误消息,该电子邮件为空。 这是错误的画面
我不明白,为什么?我的错误在哪里?
答案 0 :(得分:1)
我认为POST请求的绑定方式与您期望GET请求默认绑定的方式不同。您可以执行以下两项操作:
1)创建一个请求对象,而不是3个字符串
public class SendEmailRequest
{
public string Email {get; set;}
...
}
2)按照评论中的建议进行操作
我建议使用前一种方法,这是我认为的一种更简洁的方法,并且在我的应用程序中使用了该方法。
答案 1 :(得分:1)
尝试修改,创建具有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