আপনি কীভাবে এএসপি.নেট এমভিসিতে আরএসএস ফিডগুলি পরিচালনা করবেন তা সুপারিশ করবেন? তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করছেন? ছাত্রলীগে আরএসএসের জিনিস ব্যবহার করছেন? XML- রেন্ডার করে এমন একটি আরএসএস ভিউ তৈরি করছেন? নাকি সম্পূর্ণ আলাদা কিছু?
আপনি কীভাবে এএসপি.নেট এমভিসিতে আরএসএস ফিডগুলি পরিচালনা করবেন তা সুপারিশ করবেন? তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করছেন? ছাত্রলীগে আরএসএসের জিনিস ব্যবহার করছেন? XML- রেন্ডার করে এমন একটি আরএসএস ভিউ তৈরি করছেন? নাকি সম্পূর্ণ আলাদা কিছু?
উত্তর:
আমি যা প্রস্তাব দিচ্ছি তা এখানে:
একবার আপনি কন্টেন্টের ধরণটি আরএসে পরিবর্তন করার পরে, আপনি আরএসএসে (আপনার নিজের কোড বা অন্য কোনও লাইব্রেরি ব্যবহার করে) ডেটা ক্রমিক করতে এবং প্রতিক্রিয়াতে লিখতে চাইবেন।
আপনি আরএসএস ফেরত দিতে চান এমন কোনও নিয়ামকের উপর একটি ক্রিয়া তৈরি করুন এবং রিটার্নের ধরণটি আরএসএসআরসাল্ট হিসাবে সেট করুন। আপনি কী ফিরে আসতে চান তার উপর ভিত্তি করে আপনার মডেল থেকে ডেটা ধরুন।
তারপরে এই ক্রিয়াকলাপের যে কোনও অনুরোধ আপনি যে কোনও ডেটা বেছে নিন তার আরএসএস পাবেন।
এটি সম্ভবত আরএসএস ফেরতের দ্রুত এবং পুনঃব্যবহারযোগ্য উপায় এএসপি.নেট এমভিসির একটি অনুরোধের প্রতিক্রিয়া পেয়েছে।
base("application/rss+xml")
নির্মাতাকে কল করতে পারেন এবং 3 এবং 4 ধাপ এড়াতে পারেন He তিনি সাধারণত-দেশী কোড অনেক শর্টকাট ও এর 3.5+ বৈশিষ্ট্য ব্যবহার SyndicateItem
, SyndicateFeed
এবং Rss20FeedFormatter
।
.NET কাঠামোটি সিন্ডিকেশন পরিচালনা করে এমন ক্লাসগুলি উন্মোচিত করে: সিন্ডিকেশনফিড ইত্যাদি So তাই নিজেকে রেন্ডারিং করার পরিবর্তে বা অন্য কোনও প্রস্তাবিত আরএসএস লাইব্রেরি ব্যবহার না করে ফ্রেমওয়ার্কটি কেন এটি যত্ন নিতে দেয় না?
মূলত আপনার কেবল নিম্নলিখিত কাস্টম অ্যাকশনারসাল্টের প্রয়োজন এবং আপনি যেতে প্রস্তুত:
public class RssActionResult : ActionResult
{
public SyndicationFeed Feed { get; set; }
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.ContentType = "application/rss+xml";
Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(Feed);
using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output))
{
rssFormatter.WriteTo(writer);
}
}
}
এখন আপনার নিয়ামক ক্রিয়ায় আপনি নিম্নলিখিতগুলি সহজেই ফিরিয়ে দিতে পারেন:
return new RssActionResult() { Feed = myFeedInstance };
সেখানে আমার ব্লগে একটি পূর্ণ নমুনা http://www.developerzen.com/2009/01/11/aspnet-mvc-rss-feed-action-result/
আমি হ্যাকডের সাথে একমত আমি বর্তমানে এমভিসি কাঠামো ব্যবহার করে আমার সাইট / ব্লগ বাস্তবায়ন করছি এবং আরএসএসের জন্য একটি নতুন ভিউ তৈরির সহজ পদ্ধতির সাথে আমি গিয়েছিলাম:
<%@ Page ContentType="application/rss+xml" Language="C#" AutoEventWireup="true" CodeBehind="PostRSS.aspx.cs" Inherits="rr.web.Views.Blog.PostRSS" %><?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>ricky rosario's blog</title>
<link>http://<%= Request.Url.Host %></link>
<description>Blog RSS feed for rickyrosario.com</description>
<lastBuildDate><%= ViewData.Model.First().DatePublished.Value.ToUniversalTime().ToString("r") %></lastBuildDate>
<language>en-us</language>
<% foreach (Post p in ViewData.Model) { %>
<item>
<title><%= Html.Encode(p.Title) %></title>
<link>http://<%= Request.Url.Host + Url.Action("ViewPostByName", new RouteValueDictionary(new { name = p.Name })) %></link>
<guid>http://<%= Request.Url.Host + Url.Action("ViewPostByName", new RouteValueDictionary(new { name = p.Name })) %></guid>
<pubDate><%= p.DatePublished.Value.ToUniversalTime().ToString("r") %></pubDate>
<description><%= Html.Encode(p.Content) %></description>
</item>
<% } %>
</channel>
</rss>
(লজ্জাহীন প্লাগ) আরও তথ্যের জন্য, চেক আউট http://rickyrosario.com/blog/creating-an-rss-feed-in-asp-net-mvc
আর একটি উন্মাদ পদ্ধতির, তবে এর সুবিধাটি হ'ল আরএসএসকে রেন্ডার করার জন্য একটি সাধারণ .aspx ভিউ ব্যবহার করা। আপনার ক্রিয়া পদ্ধতিতে, উপযুক্ত সামগ্রীর প্রকার সেট করুন। এই পদ্ধতির একটি সুবিধা হ'ল বোঝা যায় যে কী কী রেন্ডার করা হচ্ছে এবং কীভাবে ভূ-অবস্থানের মতো কাস্টম উপাদান যুক্ত করা যায়।
তারপরে আবার তালিকাভুক্ত অন্যান্য পদ্ধতিগুলি আরও ভাল হতে পারে, আমি কেবল সেগুলি ব্যবহার করি নি। ;)
আমি এটি ইরান ক্যাম্পফ এবং স্কট হ্যানসেলম্যান ভিডের কাছ থেকে পেয়েছি (লিঙ্কটি ভুলে গিয়েছি) সুতরাং এটি অন্য কয়েকটি পোস্টের চেয়ে কিছুটা আলাদা তবে আশা করি সহায়ক এবং কপি পেস্টটি উদাহরণ আরএসএস ফিড হিসাবে প্রস্তুত।
using System;
using System.Collections.Generic;
using System.ServiceModel.Syndication;
using System.Web;
using System.Web.Mvc;
using System.Xml;
namespace MVC3JavaScript_3_2012.Rss
{
public class RssFeed : FileResult
{
private Uri _currentUrl;
private readonly string _title;
private readonly string _description;
private readonly List<SyndicationItem> _items;
public RssFeed(string contentType, string title, string description, List<SyndicationItem> items)
: base(contentType)
{
_title = title;
_description = description;
_items = items;
}
protected override void WriteFile(HttpResponseBase response)
{
var feed = new SyndicationFeed(title: this._title, description: _description, feedAlternateLink: _currentUrl,
items: this._items);
var formatter = new Rss20FeedFormatter(feed);
using (var writer = XmlWriter.Create(response.Output))
{
formatter.WriteTo(writer);
}
}
public override void ExecuteResult(ControllerContext context)
{
_currentUrl = context.RequestContext.HttpContext.Request.Url;
base.ExecuteResult(context);
}
}
}
এবং নিয়ামক কোড ....
[HttpGet]
public ActionResult RssFeed()
{
var items = new List<SyndicationItem>();
for (int i = 0; i < 20; i++)
{
var item = new SyndicationItem()
{
Id = Guid.NewGuid().ToString(),
Title = SyndicationContent.CreatePlaintextContent(String.Format("My Title {0}", Guid.NewGuid())),
Content = SyndicationContent.CreateHtmlContent("Content The stuff."),
PublishDate = DateTime.Now
};
item.Links.Add(SyndicationLink.CreateAlternateLink(new Uri("http://www.google.com")));//Nothing alternate about it. It is the MAIN link for the item.
items.Add(item);
}
return new RssFeed(title: "Greatness",
items: items,
contentType: "application/rss+xml",
description: String.Format("Sooper Dooper {0}", Guid.NewGuid()));
}