Próbuję utworzyć automatyczną mapę witryny ActionResult, która wyświetla prawidłowy plik sitemap.xml. Faktyczne generowanie pliku nie stanowi problemu, ale nie mogę wymyślić, jak wypełnić listę adresów URL w systemie. Oto kod mam tak daleko:Dynamiczna mapa strony w ASP.NET MVC
public ContentResult Sitemap()
{
XNamespace xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9";
XElement root = new XElement(xmlns + "urlset");
//some kind of foreach here to get the loc variable for all URLs in the site
//for each URL in the collection, add it to the root element as here
//root.Add(
// new XElement("url",
// new XElement("loc", "http://google.com"),
// new XElement("changefreq", "daily")));
using (MemoryStream ms = new MemoryStream())
{
using (StreamWriter writer = new StreamWriter(ms, Encoding.UTF8))
{
root.Save(writer);
}
return Content(Encoding.UTF8.GetString(ms.ToArray()), "text/xml", Encoding.UTF8);
}
}
Na przykład załóżmy, że mam dwa kontrolery, a każdy kontroler ma dwa działania z nimi związane:
HelpController
- Edycja
- Utwórz
AboutController
- Firma
- Zarządzanie
I nie wydaje się dowiedzieć się, jak uzyskać listę adresów URL, takich jak:
- http://localhost/help/edit
- http://localhost/help/create
- http://localhost/about/company
- http://localhost/about/management
Ostatnio, podobnie jak w odpowiedzi na @ eduncan911, najlepszym rozwiązaniem jest użycie http://mvcsitemap.codeplex.com/ aktywnego i zaktualizowanego projektu, obsługa przycinania zabezpieczeń i wygenerowanie pliku sitemap.xml. Może również automatycznie skompresować mapę witryny, jeśli agent ją obsługuje i podzielić mapę witryny na podstrony, jeśli witryna jest zbyt duża, ponieważ standard sitemap.xml ma limit tylko do 50 000 węzłów. – CallMeLaNN
Dzięki CallMeLaNN. Niedawno zaktualizowałem odpowiedź, aby wymienić te punkty i więcej, a także listę witryn, do których się przeniosły. – eduncan911