RSS è un formato di syndication che nella versione 2.0 ha raggiunto praticamente la popolarità assoluta.
Benchè ci siano molte classi di generazione di feed RSS, non tutte sono flessibili. Questa presentata in questo script è implementata come HttpHandler, quindi risulta facilmente installabile e personalizzabile, dato che agisce leggendo query e stringa di connessione direttamente dal web.config locale.
Per prima cosa è dunque necessario creare una class library all'interno della quale compilare questa classe:
using System; using System.Web; using System.Xml; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Text; namespace ASPItalia { public class RSSHandler:IHttpHandler { public void ProcessRequest(HttpContext ctx) { ctx.Response.ContentType = "text/xml"; // creo un nuovo oggetto XmlTextWriter con output // sullo stream dell'oggetto Response XmlTextWriter writer = new XmlTextWriter(ctx.Response.OutputStream, Encoding.Default); writer.Formatting = Formatting.Indented; // aggiungo l'intestazione XML writer.WriteRaw("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>"); // root writer.WriteStartElement("rss"); writer.WriteAttributeString("version", "2.0"); writer.WriteAttributeString("xmlns:dc", "http://purl.org/dc/elements/1.1/"); // channel writer.WriteStartElement("channel"); // info writer.WriteElementString("title", "Feed RSS"); writer.WriteElementString("link", "https://www.aspitalia.com/"); writer.WriteElementString("description", "descrizione"); writer.WriteElementString("dc:language", "it-it"); writer.WriteElementString("generator", "RSS Generated by ASPItalia.com"); writer.WriteElementString("managingEditor", "Gestore(gestore@sito.ext)"); writer.WriteElementString("webMaster", "Gestore(gestore@sito.ext)"); writer.WriteElementString("copyright", "(C)"); // leggo le info da web.config string sql = ConfigurationSettings.AppSettings["rssSql"] as String; string strconn = ConfigurationSettings.AppSettings["rssConnection"] as String; // estraggo i dati using (SqlConnection conn = new SqlConnection(strconn)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); // ciclo per inserire i dati nel feed while (reader.Read()) { writer.WriteStartElement("item"); writer.WriteElementString("title", ctx.Server.HtmlEncode(reader["titolo"].ToString())); writer.WriteElementString("link", reader["URL"].ToString()); writer.WriteElementString("pubDate", Convert.ToDateTime(reader["data"]).ToString("r")); writer.WriteElementString("description", reader["description"].ToString()); writer.WriteElementString("dc:creator", reader["autore"].ToString()); writer.WriteElementString("comments", reader["URL"].ToString()); writer.WriteElementString("guid", reader["URL"].ToString()); writer.WriteEndElement(); } } } // chiudo tag channel writer.WriteEndElement(); // chiudo tag rss writer.WriteEndElement(); // scrivo a video e chiudo lo stream writer.Flush(); writer.Close(); } public bool IsReusable { get { return true; } } } }
Una volta ricavato l'assembly, andrà registrato nel web.config, insieme a due chiavi che andranno a contenere la query e la stringa di connessione:
<configuration> <appSettings> <add key="rssSql" value="SELECT 'http://sito/?title_id=' + title_id as Url, title, pubdate as date, notes as description, '' as author FROM titles" /> <add key="rssConn" value="server=localhost;database=pubs;trusted_connection=true;" /> </appSettings> <system.web> <httpHandlers> <add verb="*" path="rss.aspx" type="ASPItalia.RSSHandler,RSSHandler" /> </httpHandlers> </system.web> </configuration>
In questo esempio l'handler risponderà alle chiamate al file rss.aspx, estraendo i dati attraverso la query specificata.
E' utile notare che i nomi dei campi restituiti devono essere gli stessi utilizzati dalla classe e che questa limitazione si aggira facilmente utilizzando opportunamente gli alias all'interno della query.
Qualora si voglia avere feed RSS diversi, è sufficiente creare sottodirectory, piazzando all'interno di ciascuna questo web.config, ovviamente modificando la query.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
-
Utilizzare servizi applicativi durante la validazione in ASP.NET Core
-
Utilizzare il framework FluentValidation con ASP.NET Core
-
Consumare dati binari in realtime lato client con ASP.NET Core SignalR
-
Semplificare la gestione degli array in querystring in ASP.NET Core
-
Migliorare la leggibilità degli URL con ASP.NET Core 2.2
-
Anteprima di ASP.NET Core 3
-
Sfruttare HTTP2 con IIS e Kestrel in ASP.NET Core
-
Utilizzare un endpoint ASP.NET Web API come data source protetta in Excel o Power BI
-
Scenari complessi di validazione con FluentValidation su ASP.NET Core
-
Migrare un'application ASP.NET Core 2.1 alla versione 2.2
-
Sicurezza nelle applicazioni ASP.NET Core
-
Personalizzazioni avanzate del parsing della richiesta in ASP.NET Core
I più letti di oggi
- Novità di Blazor Server su ASP.NET Core 3.1
- Building modern web apps with Blazor
- What's new in Xamarin and Visual Studio for macos
- DevOps in a .NET world
- WPF and Windows Apps in .NET Core 3
- Chiamare direttamente un numero di telefono con HTML5
- ecco tutte le novità pubblicate sui nostri siti questa settimana: http://aspit.co/wkly buon week-end!
- Autenticazione tramite OAuth Bearer Token in ASP.NET Web API
- C# 8