आप ASP.NET MVC में RSS फ़ीड्स से निपटने के लिए कैसे करेंगे? किसी तीसरे पक्ष के पुस्तकालय का उपयोग करना? BCL में RSS सामान का उपयोग? बस एक आरएसएस विचार बना रहा है जो एक्सएमएल को प्रस्तुत करता है? या कुछ और पूरी तरह से अलग?
आप ASP.NET MVC में RSS फ़ीड्स से निपटने के लिए कैसे करेंगे? किसी तीसरे पक्ष के पुस्तकालय का उपयोग करना? BCL में RSS सामान का उपयोग? बस एक आरएसएस विचार बना रहा है जो एक्सएमएल को प्रस्तुत करता है? या कुछ और पूरी तरह से अलग?
जवाबों:
यहाँ मेरा सुझाव है:
एक बार जब आप सामग्री प्रकार को rss में बदल देते हैं, तो आप RSS (अपने स्वयं के कोड या किसी अन्य लाइब्रेरी का उपयोग करके) में डेटा को क्रमबद्ध करना चाहेंगे और प्रतिक्रिया को लिखेंगे।
एक नियंत्रक पर एक क्रिया बनाएँ जिसे आप rss वापस करना चाहते हैं और RssResult के रूप में रिटर्न प्रकार सेट करें। अपने मॉडल से उस डेटा को पकड़ो जो आप वापस करना चाहते हैं।
फिर इस कार्रवाई के लिए किसी भी अनुरोध को आप जो भी डेटा चुनते हैं, उसका आरएसएस प्राप्त करेगा।
यह संभवत: rss वापस करने का सबसे तेज और पुन: प्रयोज्य तरीका है। ASP.NET MVC के अनुरोध का जवाब है।
base("application/rss+xml")
और चरण 3 और 4 से बच सकते हैं । वह ExecuteResult को ओवरराइड करता है, लेकिन यह महत्वपूर्ण नहीं है। उन्होंने यह भी आम तौर पर-पहनें कोड का एक बहुत शॉर्टकट और की 3.5+ सुविधाओं का उपयोग करता SyndicateItem
, SyndicateFeed
है, और Rss20FeedFormatter
।
.NET फ्रेमवर्क उन कक्षाओं को उजागर करता है जो सिंडिकेशन को संभालते हैं: सिंडिकेशनफीड आदि। इसलिए खुद को रेंडर करने या कुछ अन्य सुझाए गए आरएसएस लाइब्रेरी का उपयोग करने के बजाय फ्रेमवर्क का ख्याल क्यों नहीं रखना चाहिए?
मूल रूप से आपको केवल निम्नलिखित कस्टम क्रिया की आवश्यकता है और आप जाने के लिए तैयार हैं:
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 दृश्य का उपयोग करना है। अपनी कार्रवाई विधि में, बस उपयुक्त सामग्री प्रकार सेट करें। इस दृष्टिकोण का एक लाभ यह समझना आसान है कि क्या प्रस्तुत किया जा रहा है और जियोलोकेशन जैसे कस्टम तत्वों को कैसे जोड़ा जाए।
फिर, सूचीबद्ध अन्य दृष्टिकोण बेहतर हो सकते हैं, मैंने अभी उनका उपयोग नहीं किया है। ;)
मुझे यह एरण कैम्फ और एक स्कॉट हैन्समैन vid (लिंक को भूल गया) से मिला, इसलिए यह केवल कुछ अन्य पदों से थोड़ा अलग है, लेकिन उम्मीद है कि सहायक और कॉपी पेस्ट उदाहरण rss फ़ीड के रूप में तैयार है।
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()));
}