亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

WebAPI 控制器看不到價值

WebAPI 控制器看不到價值

C#
收到一只叮咚 2021-11-14 10:48:09
我有發送郵件控制器這是接口代碼  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": "[email protected]", "subject": "Get Medicine", "message": null }但是我收到錯誤消息,該電子郵件為空。這是錯誤的屏幕我不明白,為什么?我的錯誤在哪里?
查看完整描述

2 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

嘗試修改,為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 protected]

盡管第一個具有優先級,請注意,我沒有在參數中傳遞消息,因為它在原始查詢和順序或參數中為 null 可以是任何內容。


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


查看完整回答
反對 回復 2021-11-14
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

我認為 POST 請求的綁定方式與您期望默認綁定 GET 請求的方式不同。您可以為此做兩件事:


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


public class SendEmailRequest

{

    public string Email {get; set;}

    ...

}

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


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


查看完整回答
反對 回復 2021-11-14
  • 2 回答
  • 0 關注
  • 169 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號