آموزش ایجاد RSS در MVC 5
آموزش ایجاد RSS در MVC 5
در این پست نحوه ایجاد RSS در MVC 5 را قرار داده ایم.
RSS مخفف Really Simple Syndication میباشد که بشما اجازه میدهد محتویات سایت خود را دسته بندی کرده و با یک فرمت سریع و استاندارد تیتر مقالات و اخبار سایت خود را در دسترس دیگران قرار دهید. فرمت فایل های RSS همان XML است. و بصورت اتوماتیک آپدیت میشود.
بدون وجود RSS کاربران باید هر روز سایت شما را چک کنند تا بتوانند از تازه های سایت شما باخبر شوند . اما با این تکنولوژی ، کاربران ، RSS چندین سایت را در یک برنامه RSS aggregator (یا RSS خوان) در کنار هم می بینند و تایتل نوشته های اخیر سایت شما را بدون مراجعه به سایت شما مشاهده میکنند.
برای ایجاد RSS در MVC 5 یک کلاس به نام RssResult ایجاد کنید و کدهای زیر را برای کلاسی که ایجاد کردید همانند مثال زیر تغییر دهید.
using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel.Syndication; using System.Web; using System.Web.Mvc; using System.Xml; namespace MyProjectName.Infrastructure { public class RssResult : FileResult { private readonly SyndicationFeed _feed; /// <summary> /// Creates a new instance of RssResult /// based on this sample /// http://www.developerzen.com/2009/01/11/aspnet-mvc-rss-feed-action-result/ /// </summary> /// <param name="feed">The feed to return the user.</param> public RssResult(SyndicationFeed feed) : base("application/rss+xml") { _feed = feed; } /// <summary> /// Creates a new instance of RssResult /// </summary> /// <param name="title">The title for the feed.</param> /// <param name="feedItems">The items of the feed.</param> public RssResult(string title, List<SyndicationItem> feedItems) : base("application/rss+xml") { _feed = new SyndicationFeed(title, title, HttpContext.Current.Request.Url) { Items = feedItems }; } protected override void WriteFile(HttpResponseBase response) { using (XmlWriter writer = XmlWriter.Create(response.OutputStream)) { _feed.GetRss20Formatter().WriteTo(writer); } } } }
حالا به کنترلی بروید که می خواهید اکشن متد RSS را بنویسید ما این اکشن متد را در کنترلر Home نوشتیم.
کدهای اکشن متد Rss به صورت زیر می باشد.
//[Route("Feed")] public virtual ActionResult Rss() { var items = new List<SyndicationItem>(); var rssTopic = db.Products.OrderByDescending(c => c.InsertDateTime).Take(10); foreach (var varTopic in rssTopic) { string feedTitle = varTopic.ProductTitle; var helper = new UrlHelper(this.Request.RequestContext); var url = helper.Action("Index", "Home", new { }, Request.IsSecureConnection ? "https" : "http"); url += "product/" + varTopic.ProductID + "/" + varTopic.ProductTitle; var feedPackageItem = new SyndicationItem(feedTitle, varTopic.ProductSummary, new Uri(url)); feedPackageItem.PublishDate = varTopic.InsertDateTime; items.Add(feedPackageItem); } return new RssResult("نام سایت", items); }
اگر به کدهای بالا نگاه کنید ابتدا 10 مطلب یا محصول را از دیتابیس خواندیم و سپس در یک متغیر var قرار دادیم و سپس توسط دستور foreach مطالب یا محصولات را خوانیم.
مسیر دسترسی
در این قسمت مسیر دسترسی به مطلب یا محصول را مشخص کردیم که به صورت یک آدرس سفارشی می باشد، در پست های قبلی آموزش ایجاد url های سفارشی را توضیح دادیم.
توضیح ProductSummary
نام فیلدی که از مطلب یا محصول مختصر توضیح داده شده را مشخص کردیم.
تاریخ انتشار InsertDateTime
و در نهایت تاریخ انتشار مطلب یا محصول را مشخص کردیم.
نکته مهم:
اگر به کد بالا نگاه کنید رور اکشن متد Rss یک اتربیوت نوشتیم که نحوه دسترسی به این RSS به صورت www.iranganj.ir/Rss خواهد بود در صورتی که این ویژگی را به متد اضافه نکنید دسترسی به Rss به صورت www.iranganj.ir/Home/Rss خواهد شد.
یک روش دیگر برای این کار استفاده از کلاس RouteConfig.cs در پوشه App_Start است برای این کار باید کد زیر را به این کلاس اضافه کنید.
routes.MapRoute("RSS", "rss",new { controller = "Home", action = "Rss" });
اگه به کد بالا دقت کنید کار خاصی انجام ندادیم و فقط مسیر دسترسی به اکشن متد را مشخص کردیم.
نظر / سوال