繁体   English   中英

如何使用AJAX发送POST数据? 以及如何在Web API中获取POST数据?

[英]How to send POST data with AJAX? And how to get POST data in Web API?

在我的MVC项目中,我必须将HTML表格作为电子邮件发送给客户端。

我在Web API上有一个电子邮件功能,我应该调用它:

public class FunctionsController : ApiController
{
    [HttpPost]
    [Route("{controller}/email")]
    public void SendEmail(string to, string from, string body, string subject, string bcc)
    {
        SmtpClient smtpClient = new SmtpClient();
        smtpClient.Host = "xxxx";
        MailMessage mailMessage = new MailMessage();

        mailMessage.IsBodyHtml = true;
        mailMessage.Body = body;
        mailMessage.Subject = subject;
        mailMessage.From = new MailAddress(from);
        mailMessage.To.Add(new MailAddress(to));
        mailMessage.Bcc.Add(new MailAddress(bcc));

        smtpClient.Send(mailMessage);
    }

我不知道怎么做。

这是我的MVC项目上的sendEmail javascript函数(使用Knockout):

   self.sendEmail = function (to, from, body, subject, bcc) {
    $.ajax({
        url: "../API/functions/email",
        type: "POST",
        data: {
            'to': to,
            'from': from,
            'body': body,
            'subject': subject,
            'bcc' : bcc
        },
        contentType: "application/json",
        success: function (data) {
           console.log(ko.toJSON(data));
        }
    });
}

我应该如何在Web API中获取POST数据? 我的javascript功能是否正确?

提前致谢。

制作模型/视图模型总是更好的做法。

public class EmailViewModel
{
    public string Body { get; set; }
    public string Subject { get; set; }
    public string From { get; set; }
    public string To { get; set; }
    public string Bcc { get; set; }
}

现在控制器方法将是:

 public void SendEmail(EmailViewModel email)
  {
       .......
  }

和ajax调用将是:

 var email={
        'Body': body,
        'Subject': subject ,
        'From': from,
        'To': to,
        'Bcc': ''
   };
   $.ajax({
    url: "../xxx/functions/email/",
    type: "POST",
    data: email,
    contentType: "application/json",
    success: function (data) {
        callback(data);
    }
});

希望这会有所帮助:)

您在js中的数据字段:

    data: {
        'from_email': from,
        'to': to,
        'autotext': 'true',
        'subject': subject,
        'html': body
    },

应匹配您的控制器参数名称:

public void SendEmail(string sBody, string sSubject, string sFrom, string sTo, string sBcc)

如果匹配,MVC将自动绑定它们。

因此,如果您想在控制器中获取数据,您应该更改控制器签名的js。

例如,让我们改变控制器:

public void SendEmail(string html, string subject, string from_email, string to, string sBcc)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM