Προσθήκη RSS feed με ASP.NET Core
Εισαγωγή
RSS ( και AtomΜSK1 εξακολουθεί να είναι η μόνη ευρέως υιοθετημένη μορφή για το συνδετικό περιεχόμενο. ΤοMK3χει μια απλή μορφή XML που μπορεί να καταναλωθεί από ένα ευρύ φάσμα αναγνωστών feedMST4Σε αυτό το postMSM5 θα σας δείξει πώς να προσθέσετε ένα RSS feed στο ASPMSL7NET Core applicationMSS8
Δημιουργία της τροφής
Στην πραγματικότητα, ο πυρήνας αυτού είναι η δημιουργία του εγγράφου XML για το feed RSS.
Ο κώδικας παρακάτω περιλαμβάνει μια λίστα RssFeedItem αντικείμενα και παράγει το XML για το feed. RssFeedItem κλάση είναι μια απλή κατηγορία που αντιπροσωπεύει ένα στοιχείο στην ενότητα. Έχει ιδιότητες για τον τίτλοΜSK1 σύνδεσμοςΜΚ2 περιγραφήΜΣΚ3 ημερομηνία δημοσίευσηςΜСК4 και κατηγορίες
public string GenerateFeed(IEnumerable<RssFeedItem> items, string categoryName = "")
{
XNamespace atom = "http://www.w3.org/2005/Atom";
var feed = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement("rss", new XAttribute(XNamespace.Xmlns + "atom", atom.NamespaceName), new XAttribute("version", "2.0"),
new XElement("channel",
new XElement("title", !string.IsNullOrEmpty(categoryName) ? $"mostlylucid.net for {categoryName}" : $"mostlylucid.net"),
new XElement("link", $"{GetSiteUrl()}/rss"),
new XElement("description", "The latest posts from mostlylucid.net"),
new XElement("pubDate", DateTime.UtcNow.ToString("R")),
new XElement(atom + "link",
new XAttribute("href", $"{GetSiteUrl()}/rss"),
new XAttribute("rel", "self"),
new XAttribute("type", "application/rss+xml")),
from item in items
select new XElement("item",
new XElement("title", item.Title),
new XElement("link", item.Link),
new XElement("guid", item.Guid, new XAttribute("isPermaLink", "false")),
new XElement("description", item.Description),
new XElement("pubDate", item.PubDate.ToString("R")),
from category in item.Categories
select new XElement("category", category)
)
)
)
);
var settings = new XmlWriterSettings
{
Indent = true,
Encoding = new UTF8Encoding(false) // UTF-8 without BOM
};
using (var memoryStream = new MemoryStream())
using (var writer = XmlWriter.Create(memoryStream, settings))
{
feed.Save(writer);
writer.Flush();
return Encoding.UTF8.GetString(memoryStream.ToArray());
}
}
Σημειώσεις στο κώδικα πάνω:
Πρέπει να δημιουργήσουμε το Atom name space και να το ενέξουμε στο έγγραφο XML για να υποστηρίξουμε την atom:link Ετικέτες .
XNamespace atom = "http://www.w3.org/2005/Atom";
var feed = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement("rss", new XAttribute(XNamespace.Xmlns + "atom", atom.NamespaceName), new XAttribute("version", "2.0"),
ΠΕΡΙΣΣΟΤΕΡΙΚΗ ΕΠΙΧΕΙΡΗΣΗ ΚΟΙΝΔΥΝΑ
Παρόλο που προσδιορίζουμε utf-8 Εδώ καλά ASP.NET Κορυφαία αγνοεί ότι...επειδήΜSK2 ειδικόM SK3 Αντίθετα, πρέπει να διασφαλίσουμε ότι οι αλυσίδες που παράγονται στο έγγραφο είναι πραγματικά UTF ΜSK4 είχα σκεφτεί αυτό
var settings = new XmlWriterSettings
{
Indent = true,
Encoding = new UTF8Encoding(false) // UTF-8 without BOM
};
Ωστόσο, η NOPE...χρειάζεται να το κάνει αυτόΜSK1
using (var memoryStream = new MemoryStream())
using (var writer = XmlWriter.Create(memoryStream, settings))
{
feed.Save(writer);
writer.Flush();
return Encoding.UTF8.GetString(memoryStream.ToArray());
}
Με αυτόν τον τρόπο εκπέμπει ΣΗΜΕΡΑ ένα έγγραφο XML με utf-8 κρυπτογράφηση.
Ο ελεγκτής
Από εκεί και πέρα, το ' είναι αρκετά απλό στο RSSController για το , αλλά έχουμε μια μέθοδο που αποδέχεται category και startdate ( επί του παρόντος ένα υπερ-κρυφό χαρακτηριστικό Η ??) αναφέρει και επιστρέφει το feedΗ ΜSK2 αναφέρει
[HttpGet]
public IActionResult Index([FromQuery] string category = null, [FromQuery] string startDate = null)
{
DateTime? startDateTime = null;
if (DateTime.TryParseExact(startDate, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None,
out DateTime startDateTIme))
{
logger.LogInformation("Start date is {startDate}", startDate);
}
var rssFeed = rssFeedService.GenerateFeed(startDateTime, category);
return Content(rssFeed, "application/rss+xml", Encoding.UTF8);
}
ΤΙ ΕΙΝΑΙ ΣΤΗΝ `_Σχεδιασμός.cshtmlΜSK1 προσθέτουμε έναν σύνδεσμο στο feed:
<link rel="alternate" type="application/rss+xml"
title="RSS Feed for mostlylucid.net"
href="/rss" />
Αυτό εξασφαλίζει ότι η τροφή μπορεί να είναι 'ΑυτοανακαλύφθηκεΜSK1 από τους αναγνώστες τροφίμων ΜSK2