J'ai créé un SitemapResult
qui dérive de ActionResult
. Il permet à l'appelant d'ajouter n'importe quel nombre de ressources URL, puis il produit des données sitemap au format XML.
public class SitemapResult : ActionResult
{
private List<SitemapUrl> SitemapItems;
public SitemapResult()
{
SitemapItems = new List<SitemapUrl>();
}
public void AddUrl(string url, DateTime? lastModified = null, SitemapFrequency? frequency = null, double? priority = null)
{
AddUrl(new SitemapUrl(url, lastModified, frequency, priority));
}
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.ContentType = "text/xml; charset=utf-8";
using (XmlWriter writer = XmlWriter.Create(context.HttpContext.Response.Output))
{
// TODO: Write sitemap data to output
}
}
}
Le problème est que la classe stocke toutes les URLs jusqu'à ce que ExecuteResult()
est appelé. Il me semble qu'il serait plus efficace d'écrire chaque URL dans la réponse au fur et à mesure qu'elles sont ajoutées, plutôt que de les garder en mémoire et de tout écrire en même temps.
Est-ce que quelqu'un connaît de bons exemples de contournement ActionResult
pour écrire les données dans la réponse dès qu'elles sont disponibles ? Dans ce cas, je pense que ExecuteResult()
n'auront pas besoin d'écrire quoi que ce soit.