简体   繁体   English

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

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

On my MVC project I have to send a HTML table as an email to the client. 在我的MVC项目中,我必须将HTML表格作为电子邮件发送给客户端。

I have an Email Function on a Web API that I should call: 我在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);
    }

I'm not sure how to do it. 我不知道怎么做。

This is my sendEmail javascript function on my MVC project (using Knockout): 这是我的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));
        }
    });
}

How should I get the POST data in the Web API? 我应该如何在Web API中获取POST数据? Is my javascript function correct? 我的javascript功能是否正确?

Thanks in advance. 提前致谢。

It's always better practice to make a model/viewmodel. 制作模型/视图模型总是更好的做法。

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

Now the controller method will be like: 现在控制器方法将是:

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

and the ajax call will be like: 和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);
    }
});

Hope this will help :) 希望这会有所帮助:)

Your data fields in js: 您在js中的数据字段:

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

Should match your controllers parameters names: 应匹配您的控制器参数名称:

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

If the are match MVC will automatically bind them. 如果匹配,MVC将自动绑定它们。

So if you want to get your data in controller you should either change your js of controller signature. 因此,如果您想在控制器中获取数据,您应该更改控制器签名的js。

For example let's change controller: 例如,让我们改变控制器:

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