Email Notification با استفاده ازWeb API 2 در MVC 5

شنبه 4 اردیبهشت 1395

در این مقاله درباره ی ایجاد Web API و دسترسی به Web API با استفاده از MVC 5 و ارسال ایمیل با استفاده از Web API 2 صحبت میکنیم و نمونه ای از Email Notification میسازیم.

Email Notification با استفاده ازWeb API 2 در  MVC 5

مراحل ایجاد پروژه را مرحله به مرحله پیش می رویم

ایجاد ASP.NET Web API Application/ Project

کار با Web API Application

 افزودن model

افزودن Controller

افزودن کلاس Helper

فراخوانی Web API  با جاوا اسکریپت و JQUERY

  کلاینت به راحتی با فراخوانی  API و send Email Notification (Install Fiddler)   از آن استفاده میکند .     

پروژه جدیدی ایجاد میکنیم

 در ویژوال استدیو 2015 یا 2013 ، از منوی File ، گزینه New و Project را انتخاب میکنیم

ASP.NET Web Application را انتخاب و نام پروژه را Email Notification میگذاریم و بعد روی دکمه OK  کلیک میکنیم.

ASP.NET Web Application

 

از پنجره باز شده Web API را انتخاب میکنیم.

Web API

 

یک کلاس در  Model   اضافه میکنیم.

Add a model class

 

نام کلاس را TeamA.cs  قرار میدهیم

class

کدهای زیر ار در کلاس مربوطه وارد میکنیم.

    namespace EmailNotification.Models  
    {  
        public class TeamA  
        {  
            public int Id  
            {  
                get;  
                set;  
            }  
            public string Name  
            {  
                get;  
                set;  
            }  
            public string Type  
            {  
                get;  
                set;  
            }  
            public decimal Price  
            {  
                get;  
                set;  
            }  
        }  
    }  

 

یک کنترلر اضافه میکنیم.

Add a controller

 

در پنجره Add Scaffold ، گزینه  Web API 2 Empty Controller را انتخاب میکنیم و نام آن را EmailNotifier قرار میدهیم.

Web API 2

کدهای زیر را در کنترلر مربوطه وارد میکنیم.

    public class EmailNotifierController: ApiController  
    {  
        TeamGroupA[] teamA = new TeamGroupA[]  
        {  
            new TeamGroupA  
            {  
                Id = 1, Name = "zing", Type = "Cricket", Price = 1  
            },  
            new TeamGroupA  
            {  
                Id = 2, Name = "Yo-yo", Type = "Football", Price = 3.75M  
            },  
            new TeamGroupA  
            {  
                Id = 3, Name = "soft", Type = "Software", Price = 16.99M  
            }  
        };  
        // Run the application  
        public IEnumerable < TeamGroupA > GetAllTeams()  
        {  
            return teamA;  
        }  
    }  

برای حفظ این مثال ساده، TeamGroup  در یک آرایه ثابت داخل کلاس کنترل ذخیره می شود. اما، در یک برنامه واقعی، شما می توانید از آن در  لایه Data Access و یا برخی از منبع داده خارجی دیگر استفاده کنید

کنترلر دو متد که محصولات را  برمیگردانند ، تعریف میکند: متد GetAllTeams لیست کامل محصولات با  نوع IEnumerable<TeamGroupA>  می گرداند.

Web API  ممکن است شامل یک یا چند متد ابشد .

Model جدیدی برای  AdpaterResponsebase برای دیگرمتدهای  API ها با نام SendEmailNotification.cs ایجاد میکنیم.

AdapterResponseBase.cs

AdapterResponseBase.cs

 کدهای زیر را در آن وارد میکنیم

    using System;  
    using System.Collections.Generic;  
    namespace EmailNotification.Models  
    {  
        public class ResponseBase  
        {}  
        public class RequestBase  
        {}  
        public class RequestBase < T > : RequestBase  
        {  
            public RequestBase()  
            {}  
            public RequestBase(T data)  
            {  
                Data = data;  
            }  
            public T Data  
            {  
                get;  
                set;  
            }  
        }  
    }  

پوشه ای بنام Helpers  ایجاد کرده و کلاس  EMailHelper.cs را در آن اضافه میکنیم.

new Helper class

 

کدهای زیر را وارد کلاس EMailHelper.cs میکنیم.

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    using System.Threading.Tasks;  
    namespace Common.Helpers  
    {  
        public class EMailHelper  
        {  
            // Note: To send email you need to add actual email id and credential so that it will work as expected  
            public static readonly string EMAIL_SENDER = "xyz.abc@outlook.com"; // change it to actual sender email id or get it from UI input  
            public static readonly string EMAIL_CREDENTIALS = "*******"; // Provide credentials   
            public static readonly string SMTP_CLIENT = "smtp-mail.outlook.com"; // as we are using outlook so we have provided smtp-mail.outlook.com   
            public static readonly string EMAIL_BODY = "Reset your Password <a href='http://{0}.safetychain.com/api/Account/forgotPassword?{1}'>Here.</a>";  
            private string senderAddress;  
            private string clientAddress;  
            private string netPassword;  
            public EMailHelper(string sender, string Password, string client)  
            {  
                senderAddress = sender;  
                netPassword = Password;  
                clientAddress = client;  
            }  
            public bool SendEMail(string recipient, string subject, string message)  
            {  
                bool isMessageSent = false;  
                //Intialise Parameters  
                System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(clientAddress);  
                client.Port = 587;  
                client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;  
                client.UseDefaultCredentials = false;  
                System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(senderAddress, netPassword);  
                client.EnableSsl = true;  
                client.Credentials = credentials;  
                try  
                {  
                    var mail = new System.Net.Mail.MailMessage(senderAddress.Trim(), recipient.Trim());  
                    mail.Subject = subject;  
                    mail.Body = message;  
                    mail.IsBodyHtml = true;  
                    //System.Net.Mail.Attachment attachment;  
                    //attachment = new Attachment(@"C:\Users\XXX\XXX\XXX.jpg");  
                    //mail.Attachments.Add(attachment);  
                    client.Send(mail);  
                    isMessageSent = true;  
                }  
                catch(Exception ex)  
                {  
                    isMessageSent = false;  
                }  
                return isMessageSent;  
            }  
        }  
    }  

 

 

درپوشه model کلاسی با نام EmailInput.cs برای ارسال پارامترها ی ورودی ایجاد میکنیم.

Add Model

    using System;  
    namespace EmailNotofication.Models  
    {  
        public class EmailInput  
        {  
            public string UserName  
            {  
                get;  
                set;  
            }  
            public string EmailId  
            {  
                get;  
                set;  
            }  
        }  
    }  

 

در حال حاضر بخش UI  را شروع خواهیم کرد

فراخوانی API وب با جاوا اسکریپت و jQuery

یک HTML page برای استفاده از AJAX برای فراخوانی web API اضافه میکنیم. و از جی کوئری برای فراخوانی  AJAX وهمچنین بروزرسانی صفحه استفاده میکنیم.

روی پروژه راست کلیک کرده و گزینه Addو سپس New Item را انتخاب میکنیم.

select New Item

در پنجره باز شده HTML Page را انتخاب کرده و نام آن را index.html میگذاریم.

Add html page

 

کدهای زیر را در آن مینویسیم

    <!DOCTYPE html>  
    <html xmlns="http://www.w3.org/1999/xhtml">  
      
    <head>  
        <title>Notification App</title>  
    </head>  
      
    <body>  
        <div>  
            <h2>All Teams</h2>  
            <ul id="teams" /> </div>  
        <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>  
        <script>  
            var uri = 'api/EmailNotifier/GetAllTeams';  
            $(document).ready(function()  
            {  
                // Send an AJAX request  
                $.getJSON(uri).done(function(data)  
                {  
                    // On success, 'data' contains a list of teams.  
                    $.each(data, function(key, item)  
                    {  
                        // Add a list item for the teams.  
                        $('<li>',  
                        {  
                            text: formatItem(item)  
                        }).appendTo($('#teams'));  
                    });  
                });  
            });  
      
            function formatItem(item)  
            {  
                return item.Name + ': $' + item.Price;  
            }  
        </script>  
    </body>  
      
    </html>  

 

گرفتن لیستی از تیم Team

برای بدست آوردن لیستی از تیم ها ، درخواست /api/GetAllTeams را به HTTP GET ارسال میکنیم.

روی   index.html راست کلیک کرده و Set as start page را انتخاب میکنیم .

HTML Page

 

پروژه را اجرا میکنیم

دراین  مرحله ،موفق به فراخوانی Web API ، با استفاده از Ajax شدیم . حالا میخواهیم متد  Email Notification را اضافه کنیم.

run

فراخوانی endEmailNotification API  با استفاده از RestClient

متد را در کنترلر اضافه میکنیم.

    [HttpPost]  
    public async Task < IHttpActionResult > SendEmailNotification(EmailInput data)  
    {  
        ResponseBase updateResponse = new ResponseBase();  
        var updateRequest = new RequestBase < EmailInput > (data);  
        try  
        {  
            EMailHelper mailHelper = new EMailHelper(EMailHelper.EMAIL_SENDER, EMailHelper.EMAIL_CREDENTIALS, EMailHelper.SMTP_CLIENT);  
            var emailBody = String.Format(EMailHelper.EMAIL_BODY);  
            if(mailHelper.SendEMail(data.EmailId, EMailHelper.EMAIL_SUBJECT, emailBody))  
            {  
                //   
            }  
        }  
        catch(Exception ex)  
        {}  
        return Ok(updateResponse);  
    }  

email Notification

در این مرحله نیاز به extension در  RestClient در مرورگر chrome browser ، برای فراخوانی API داریم.

Pass the parameter

نکته : برای اجرای صفحه بالا حتما نیاز به نصب  RestClient  در مرورگر کروم دارید

ادرس زیر را در مرورگر وارد کنید

 http://localhost:21084/api/EmailNotifier/SendEmailNotification

HTTPPOST

    Content-Type: application/json  
    {  
       "UserName": "xyz",  
       "EmailId" : "abc@gmail.com",  
    }  

زمانی که  روی دکمه  Send کلیک میکنید  ، می توانید پارامتر ورودی را با اضافه کردن debug point به API در کنترلر ، بررسی کنید.

verify input parameter

 

پس از اجرای موفقیت آمیز ، پاسخی به شرح زیر دریافت میکنیم:

response

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید