Email Notification با استفاده ازWeb API 2 در MVC 5
شنبه 4 اردیبهشت 1395در این مقاله درباره ی ایجاد Web API و دسترسی به Web API با استفاده از MVC 5 و ارسال ایمیل با استفاده از Web API 2 صحبت میکنیم و نمونه ای از Email Notification میسازیم.
مراحل ایجاد پروژه را مرحله به مرحله پیش می رویم
ایجاد 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 کلیک میکنیم.
از پنجره باز شده Web API را انتخاب میکنیم.
یک کلاس در Model اضافه میکنیم.
نام کلاس را TeamA.cs قرار میدهیم
کدهای زیر ار در کلاس مربوطه وارد میکنیم.
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 Scaffold ، گزینه Web API 2 Empty Controller را انتخاب میکنیم و نام آن را EmailNotifier قرار میدهیم.
کدهای زیر را در کنترلر مربوطه وارد میکنیم.
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
کدهای زیر را در آن وارد میکنیم
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 را در آن اضافه میکنیم.
کدهای زیر را وارد کلاس 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 برای ارسال پارامترها ی ورودی ایجاد میکنیم.
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 را انتخاب میکنیم.
در پنجره باز شده HTML Page را انتخاب کرده و نام آن را index.html میگذاریم.
کدهای زیر را در آن مینویسیم
<!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 را انتخاب میکنیم .
پروژه را اجرا میکنیم
دراین مرحله ،موفق به فراخوانی Web API ، با استفاده از Ajax شدیم . حالا میخواهیم متد Email Notification را اضافه کنیم.
فراخوانی 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); }
در این مرحله نیاز به extension در RestClient در مرورگر chrome browser ، برای فراخوانی API داریم.
نکته : برای اجرای صفحه بالا حتما نیاز به نصب RestClient در مرورگر کروم دارید
ادرس زیر را در مرورگر وارد کنید
http://localhost:21084/api/EmailNotifier/SendEmailNotification
HTTPPOST
Content-Type: application/json { "UserName": "xyz", "EmailId" : "abc@gmail.com", }
زمانی که روی دکمه Send کلیک میکنید ، می توانید پارامتر ورودی را با اضافه کردن debug point به API در کنترلر ، بررسی کنید.
پس از اجرای موفقیت آمیز ، پاسخی به شرح زیر دریافت میکنیم:
- ASP.net MVC
- 2k بازدید
- 4 تشکر