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

时间:2016-03-15 08:46:58

标签: javascript ajax asp.net-mvc asp.net-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功能是否正确?

提前致谢。

2 个答案:

答案 0 :(得分:8)

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

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);
    }
});

希望这会有所帮助:)

答案 1 :(得分:4)

您在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)