আরএসএস ফিডস এএসপি.নেট এমভিসিতে


113

আপনি কীভাবে এএসপি.নেট এমভিসিতে আরএসএস ফিডগুলি পরিচালনা করবেন তা সুপারিশ করবেন? তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করছেন? ছাত্রলীগে আরএসএসের জিনিস ব্যবহার করছেন? XML- রেন্ডার করে এমন একটি আরএসএস ভিউ তৈরি করছেন? নাকি সম্পূর্ণ আলাদা কিছু?


আরএসএসটুলকিট ব্যবহার করে আপনার নিজের আরএসএস ফিড উত্পন্ন করতে আপনার প্রকল্পে কেবল একটি একা .এক্সএক্স ফাইল থাকা দরকার। তারপরে আপনি এর ইউআরএলটিকে বন্ধুত্বপূর্ণভাবে আবার লিখতে পারেন। আমি মনে করি এই পদ্ধতির এমভিসির বিরুদ্ধে কিছুই নেই।
মাহদি তাগিজাদেহ

এখানে একটি ফলোআপ পোস্ট রয়েছে যা একটি সাধারণীকৃত সিন্ডিকেশনঅ্যাকশন ফলাফল শ্রেণীর পাশাপাশি 304 নটমোডাইফাইড শর্তসাপেক্ষ ফিল্টার নিয়ে আরএসএসএকশনআরসাল্ট ধারণাটি নিয়ে যায়। 58bit.com/blog/…
ব্লু ওয়াটারস

আমি একটি আরএসআরসাল্ট লিখেছি যা আপনার ভাল লাগলে একবার দেখে নিতে পারেন। এটি আপনার প্রয়োজনীয়তা পূরণ করতে হবে http://www.wduffy.co.uk/blog/rssresult-aspnet-mvc-rss-actionresult/
ডাব্লুডুফি

1
কেবলমাত্র এই প্রশ্নটি শেষ সম্পাদনার পরে 18 মাস হিসাবে আপডেট করার জন্য - এটি জিজ্ঞাসা করা যুক্তিসঙ্গত বলে মনে হয়েছিল '.নেট এবং এমভিসি উভয়ের ক্ষেত্রে পুনরাবৃত্তির সাথে জিনিসগুলি পরিবর্তিত হয়েছে যা আমরা ফিড পরিচালনার সমস্যাটির সাথে কীভাবে পরিবর্তন করব?' Sensক্যমত্য (একটি ভিন্ন এসও থ্রেডের মাধ্যমে) হ'ল, 'কোনও মৌলিক পরিবর্তন নেই - এটি বিকল্পের আপনার সেরা সেট হিসাবে রয়ে গেছে' '
justSteve

ASP.NET MVC এর জন্য খারাপ পরামর্শ।
tugberk

উত্তর:


64

আমি যা প্রস্তাব দিচ্ছি তা এখানে:

  1. আরএসআরসাল্ট নামে একটি ক্লাস তৈরি করুন যা অ্যাবস্ট্রাক্ট বেস ক্লাস অ্যাকশনারসাল্টের উত্তরাধিকার সূত্রে প্রাপ্ত।
  2. এক্সিকিউটআরসাল্ট পদ্ধতিটি ওভাররাইড করুন।
  3. এক্সিকিউটআরসাল্টের কাছে কলার দ্বারা কন্ট্রোলার কনটেক্সট পাঠানো হয়েছে এবং এর সাহায্যে আপনি ডেটা এবং সামগ্রীর ধরণটি পেতে পারেন।
  4. একবার আপনি কন্টেন্টের ধরণটি আরএসে পরিবর্তন করার পরে, আপনি আরএসএসে (আপনার নিজের কোড বা অন্য কোনও লাইব্রেরি ব্যবহার করে) ডেটা ক্রমিক করতে এবং প্রতিক্রিয়াতে লিখতে চাইবেন।

  5. আপনি আরএসএস ফেরত দিতে চান এমন কোনও নিয়ামকের উপর একটি ক্রিয়া তৈরি করুন এবং রিটার্নের ধরণটি আরএসএসআরসাল্ট হিসাবে সেট করুন। আপনি কী ফিরে আসতে চান তার উপর ভিত্তি করে আপনার মডেল থেকে ডেটা ধরুন।

  6. তারপরে এই ক্রিয়াকলাপের যে কোনও অনুরোধ আপনি যে কোনও ডেটা বেছে নিন তার আরএসএস পাবেন।

এটি সম্ভবত আরএসএস ফেরতের দ্রুত এবং পুনঃব্যবহারযোগ্য উপায় এএসপি.নেট এমভিসির একটি অনুরোধের প্রতিক্রিয়া পেয়েছে।


10
হ্যানসেলম্যানের একটি অনুরূপ সমাধান রয়েছে (ভিডিও: প্রায় 41m এর কাছাকাছি) যেখানে তিনি ফাইলের ফলাফল থেকে উত্তরাধিকার সূত্রে পান। এটি করার মাধ্যমে, আপনি আপনার শ্রেণীর base("application/rss+xml")নির্মাতাকে কল করতে পারেন এবং 3 এবং 4 ধাপ এড়াতে পারেন He তিনি সাধারণত-দেশী কোড অনেক শর্টকাট ও এর 3.5+ বৈশিষ্ট্য ব্যবহার SyndicateItem, SyndicateFeedএবং Rss20FeedFormatter
পৃষ্ঠপোষক

@ ডেল: আপনি যখন আংশিক দৃশ্যে ফিড আউটপুট দিতে চান তখন কি প্রতিক্রিয়াটি লেখা সম্ভব? ধন্যবাদ।
খ্রিস্টান

1
আমার পূর্বের মন্তব্য থেকে হ্যানসেলম্যানের ভিডিওর আপডেট হওয়া লিঙ্ক ।
পৃষ্ঠপোষক

150

.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/


34

আমি হ্যাকডের সাথে একমত আমি বর্তমানে এমভিসি কাঠামো ব্যবহার করে আমার সাইট / ব্লগ বাস্তবায়ন করছি এবং আরএসএসের জন্য একটি নতুন ভিউ তৈরির সহজ পদ্ধতির সাথে আমি গিয়েছিলাম:

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


4
রেজার ব্যবহারের জন্য: @ মডেল পেজমোডেল @ on প্রতিক্রিয়া। কনটেন্টটাইপ = "অ্যাপ্লিকেশন / আরএসএস + এক্সএমএল"; } <? xML version = "1.0" এনকোডিং = "ইউটিএফ -8"?>
অ্যান্থনি জনস্টন

2
কি উপরি? আপনি বোঝাতে চেয়েছেন যে আপনি একই কোডটি আরও পঠনযোগ্য উপায়ে সম্পাদনের জন্য কম কোড লিখছেন?
পল

12

আর একটি উন্মাদ পদ্ধতির, তবে এর সুবিধাটি হ'ল আরএসএসকে রেন্ডার করার জন্য একটি সাধারণ .aspx ভিউ ব্যবহার করা। আপনার ক্রিয়া পদ্ধতিতে, উপযুক্ত সামগ্রীর প্রকার সেট করুন। এই পদ্ধতির একটি সুবিধা হ'ল বোঝা যায় যে কী কী রেন্ডার করা হচ্ছে এবং কীভাবে ভূ-অবস্থানের মতো কাস্টম উপাদান যুক্ত করা যায়।

তারপরে আবার তালিকাভুক্ত অন্যান্য পদ্ধতিগুলি আরও ভাল হতে পারে, আমি কেবল সেগুলি ব্যবহার করি নি। ;)


3
@ হ্যাকড: বিশ্বটি একটি টেম্প্লেটিং সিস্টেম দ্বারা উত্পাদিত অবৈধ আরএসএস এক্সএমএল পূর্ণ। গণ্ডগোল যোগ করবেন না দয়া করে! রিকি, এইচটিএমএল এনকোডিং! = এক্সএমএল এনকোডিং।
ব্র্যাড উইলসন

নীচে এমএসডিএন থেকে এইচটিএমএল এনকোডের ডকুমেন্টেশন রয়েছে:> বর্তমান বাস্তবায়ন বিশদের কারণে এই ফাংশনটি একটি এক্সএমএল এনকোড ফাংশন হিসাবে ব্যবহার করা যেতে পারে। বর্তমানে, এই ফাংশনটি দ্বারা ব্যবহৃত সমস্ত নামকৃত সত্তাও xML পূর্বনির্ধারিত নামযুক্ত সত্তা। এইগুলি হল <> "& যেমন করুন & lt এনকোড; & gt; দ্বারা & quot; এবং এ & amp ;. অন্য সত্ত্বা মত & দশমিক এনকোডেড থাকা # 160 ;. http://msdn.microsoft.com/en-us/library/73z22y6h.aspx
রিকি

এক্সএমএল এইভাবে কার্যকর হওয়ার বিষয়টি আপনি কীভাবে নিশ্চিত করতে পারেন? এক্সএমএল ভিউ করা বা রেলপথে রুবি সম্পন্ন ইমেল টেমপ্লেটগুলি তৈরি করা, ভিউ রেন্ডারিংটি আগত কোনও ওয়েব অনুরোধ থেকে ডুপ্লুল করা হলে ভাল হবে।
প্যাকো

ভিউ ইঞ্জিন ব্যবহার করার পরিবর্তে, আপনি একটি আরএসআরসাল্ট তৈরি করতে পারেন যা অ্যাকশনারসাল্ট থেকে প্রাপ্ত। আমরা জাসনআরসাল্ট দিয়ে এটি করি যা জেএসএন-তে বস্তুটিকে সিরিয়ালাইজ করে। আপনার ক্ষেত্রে, আপনি এমন কিছু সিরিয়ালাইজার পাবেন (আমার মনে হয় ডাব্লুসিএফের একটি আছে) যা আরএসএসকে সিরিয়াল করে তোলে।
49

8

আমি এটি ইরান ক্যাম্পফ এবং স্কট হ্যানসেলম্যান ভিডের কাছ থেকে পেয়েছি (লিঙ্কটি ভুলে গিয়েছি) সুতরাং এটি অন্য কয়েকটি পোস্টের চেয়ে কিছুটা আলাদা তবে আশা করি সহায়ক এবং কপি পেস্টটি উদাহরণ আরএসএস ফিড হিসাবে প্রস্তুত।

আমার ব্লগ থেকে

ইরান কাম্প

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()));

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.