एएसपी.नेट एमवीसी में आरएसएस फ़ीड

आप एएसपी.नेट एमवीसी में आरएसएस फ़ीड को संभालने का पुनर्मूल्यांकन कैसे करेंगे? किसी तृतीय पक्ष लाइब्रेरी का उपयोग करना? बीसीएल में आरएसएस सामान का उपयोग करना? सिर्फ आरएसएस दृश्य बनाना जो एक्सएमएल प्रस्तुत करता है? या कुछ पूरी तरह से अलग है?

0
ro fr bn
अंतिम संपादन के बाद 18 महीने के रूप में इस प्रश्न को अपडेट करने के लिए - यह सवाल उठाना उचित था कि 'चीजों के साथ चीजों को बदल दिया गया है .नेट और एमवीसी जो बदल जाएंगे कि हम फ़ीड प्रबंधन की समस्या से कैसे संपर्क करते हैं'? सर्वसम्मति (एक अलग एसओ धागे के माध्यम से) यह है कि, 'कोई मौलिक परिवर्तन नहीं - यह आपके विकल्पों का सबसे अच्छा सेट बना हुआ है।'
जोड़ा लेखक justSteve, स्रोत
एएसपी.नेट एमवीसी के लिए बुरा सुझाव।
जोड़ा लेखक tugberk, स्रोत
मैंने एक रुपये रुसल्ट लिखा है जिसे आप पसंद करते हैं तो आप देख सकते हैं। इसे आपकी आवश्यकताओं को पूरा करना चाहिए http: //www.wduffy। co.uk/blog/rssresult-aspnet-mvc-rss-action‌ परिणाम/
जोड़ा लेखक WDuffy, स्रोत
रुसटूलिट का उपयोग करके आपको आरएसएस फ़ीड उत्पन्न करने के लिए अपने प्रोजेक्ट में केवल एक .ashx फ़ाइल की आवश्यकता है। फिर आप अपने यूआरएल को एक दोस्ताना को फिर से लिख सकते हैं। मुझे लगता है कि इस दृष्टिकोण में एमवीसी के खिलाफ कुछ भी नहीं है।
जोड़ा लेखक Mahdi Taghizadeh, स्रोत
यहां एक अनुवर्ती पोस्ट है जो एक सामान्यीकृत सिंडिकेशन एक्शन परिणाम वर्ग के साथ-साथ 304 NotModified सशर्त फ़िल्टर प्राप्त करने के साथ रु .ActionResult विचार थोड़ा आगे लेता है। 58bits.com/blog/ & hellip;
जोड़ा लेखक Blue Waters, स्रोत
मैंने हाल ही में आरएसएस फ़ीड बनाने के तरीके पर एक लेख लिखा है asp.net mvc जो आप जो भी खोज रहे हैं उसे भी करना चाहिए
जोड़ा लेखक Leland Richardson, स्रोत

5 उत्तर

मैं हैकड से सहमत हूं। मैं वर्तमान में एमवीसी ढांचे का उपयोग कर अपनी साइट/ब्लॉग को कार्यान्वित कर रहा हूं और मैं आरएसएस के लिए एक नया दृश्य बनाने के सरल दृष्टिकोण के साथ गया:

<%@ 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"?>


<title>ricky rosario's blog</title>
<link>http://<%= Request.Url.Host %></link>
Blog RSS feed for rickyrosario.com
<%= ViewData.Model.First().DatePublished.Value.ToUniversalTime().ToString("r") %>
en-us
<% foreach (Post p in ViewData.Model) { %>
    
    <title><%= Html.Encode(p.Title) %></title>
    <link>http://<%= Request.Url.Host + Url.Action("ViewPostByName", new RouteValueDictionary(new { name = p.Name })) %></link>
    http://<%= Request.Url.Host + Url.Action("ViewPostByName", new RouteValueDictionary(new { name = p.Name })) %>
    <%= p.DatePublished.Value.ToUniversalTime().ToString("r") %>
    <%= Html.Encode(p.Content) %>
    
<% } %>


For more information, check out (shameless plug) http://rickyrosario.com/blog/creating-an-rss-feed-in-asp-net-mvc

0
जोड़ा
क्या ऊपर की ओर? आप का मतलब यह है कि आप एक ही चीज़ को और अधिक पठनीय तरीके से पूरा करने के लिए कम कोड लिख रहे हैं?
जोड़ा लेखक Paul, स्रोत
रेजर के उपयोग के लिए: @ मॉडल पेज मॉडल @ {Response.ContentType = "एप्लिकेशन/आरएसएस + एक्सएमएल"; } <? xml संस्करण = "1.0" एन्कोडिंग = "यूटीएफ -8"?>
जोड़ा लेखक Anthony Johnston, स्रोत

यहां मैं अनुशंसा करता हूं:

  1. रु। रेसल्ट नामक एक कक्षा बनाएं अमूर्त बेस क्लास से वंचित है ActionResult।
  2. ExecuteResult विधि को ओवरराइड करें।
  3. ExecuteResult में नियंत्रक कॉन्टेक्स्ट को कॉलर द्वारा पास किया गया है और इसके साथ आप डेटा और सामग्री प्रकार प्राप्त कर सकते हैं।
  4. सामग्री सामग्री को आरएसएस में बदलने के बाद, आप आरएसएस को डेटा को क्रमबद्ध करना चाहते हैं (अपने कोड या अन्य लाइब्रेरी का उपयोग करके) और प्रतिक्रिया को लिखें।

  5. एक नियंत्रक पर एक क्रिया बनाएं जिसे आप आरएसएस वापस करना चाहते हैं और रिटर्न प्रकार को रुपये के रूप में सेट करें। आप जो मॉडल वापस करना चाहते हैं उसके आधार पर अपने मॉडल से डेटा प्राप्त करें।

  6. फिर इस क्रिया के किसी भी अनुरोध को आपके द्वारा चुने गए किसी भी डेटा का आरएसएस प्राप्त होगा।

यह शायद आरएसएस की वापसी का सबसे तेज़ और पुन: प्रयोज्य तरीका है एएसपी.नेट एमवीसी में एक अनुरोध का जवाब है।

0
जोड़ा
@Dale: जब आप आंशिक दृश्य को फ़ीड करने के लिए आउटपुट करना चाहते हैं तो प्रतिक्रिया को लिखना संभव है? धन्यवाद।
जोड़ा लेखक Christian, स्रोत
हैंसलमैन के पास एक समान समाधान (वीडियो: 41m से शुरू होता है) जहां उसे FileResult से विरासत मिलती है। ऐसा करके, आप अपने वर्ग के कन्स्ट्रक्टर कॉल base ("application/rss + xml") कर सकते हैं और चरण 3 और 4 से बच सकते हैं। वह ExecuteResult को ओवरराइड करता है, लेकिन यह महत्वपूर्ण नहीं है। वह बहुत सारे आम तौर पर होमस्पून कोड को शॉर्टकट करता है और सिंडिकेट इटिम , <कोड> सिंडिकेटफिड , और रुपये 20FeedFormatter की 3.5+ विशेषताओं का उपयोग करता है।
जोड़ा लेखक patridge, स्रोत
मेरी पूर्व टिप्पणी से हंसेलमैन का वीडियो का अपडेट किया गया लिंक।
जोड़ा लेखक patridge, स्रोत

.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 };

There's a full sample on my blog at http://www.developerzen.com/2009/01/11/aspnet-mvc-rss-feed-action-result/

0
जोड़ा

एक और पागल दृष्टिकोण, लेकिन इसका लाभ है, आरएसएस प्रस्तुत करने के लिए सामान्य .aspx दृश्य का उपयोग करना है। अपनी क्रिया विधि में, उचित सामग्री प्रकार सेट करें। इस दृष्टिकोण का एक लाभ यह समझना आसान है कि क्या प्रदान किया जा रहा है और भौगोलिक स्थान जैसे कस्टम तत्वों को कैसे जोड़ा जाए।

फिर फिर, सूचीबद्ध अन्य दृष्टिकोण बेहतर हो सकते हैं, मैंने अभी उनका उपयोग नहीं किया है। ;)

0
जोड़ा
नीचे एमएसडीएन से एचटीएमएल एनकोड का प्रलेखन है:> वर्तमान कार्यान्वयन विवरण के कारण, इस फ़ंक्शन को xmlEncode फ़ंक्शन के रूप में उपयोग किया जा सकता है। वर्तमान में, इस फ़ंक्शन द्वारा उपयोग की जाने वाली सभी नामित इकाइयां एक्सएमएल पूर्वनिर्धारित नामित संस्थाएं भी हैं। वे <> "और एन्कोड किए गए हैं & lt; & gt; & quot; और & amp; अन्य संस्थाएं दशमलव-एन्कोडेड हैं। http://msdn.microsoft.com/en-us/library/73z22y6h.aspx
जोड़ा लेखक Ricky, स्रोत
आप कैसे सुनिश्चित कर सकते हैं कि एक्सएमएल इस तरह से वैध है? यह अच्छा होगा अगर दृश्य प्रतिपादन आने वाले वेब अनुरोध से डीकॉप्ल किया गया हो, एक्सएमएल विचारों को बनाने के लिए, या संभवतः रेल पर संभव रूबी जैसे ईमेल टेम्पलेट्स।
जोड़ा लेखक Paco, स्रोत
@ हैकड: दुनिया एक अस्थायी प्रणाली द्वारा उत्पन्न अवैध आरएसएस एक्सएमएल से भरा है। कृपया गड़बड़ में मत जोड़ें! रिकी, एचटीएमएल एन्कोडिंग! = एक्सएमएल एन्कोडिंग।
जोड़ा लेखक Brad Wilson, स्रोत
एक व्यू इंजन का उपयोग करने के बजाय, आप एक्शन रिसेट से प्राप्त एक रुपये का निर्माण कर सकते हैं। हम JsonResult के साथ ऐसा करते हैं जो वस्तु को JSON पर क्रमबद्ध करता है। आपके मामले में, आपको कुछ धारावाहिक (मुझे लगता है कि डब्ल्यूसीएफ में एक है) जो आरएसएस को क्रमबद्ध करता है।
जोड़ा लेखक Haacked, स्रोत

मुझे यह एरान कम्फ और स्कॉट हंसेलमैन विद (लिंक भूल गया) से मिला है, इसलिए यह यहां कुछ अन्य पोस्टों से थोड़ा अलग है, लेकिन उम्मीद है कि उपयोगी और कॉपी पेस्ट एक उदाहरण आरएसएस फ़ीड के रूप में तैयार है।

मेरे ब्लॉग से

एरान कम्फ

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 _items;

        public RssFeed(string contentType, string title, string description, List 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();
    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()));

}
0
जोड़ा