Tôi đang cố gắng tạo một sơ đồ trang web ActionResult tự động xuất ra một tệp sitemap.xml hợp lệ. Thế hệ thực sự của tập tin không phải là một vấn đề, nhưng tôi dường như không thể tìm ra cách để đưa vào danh sách các URL trong hệ thống. Dưới đây là đoạn code tôi có cho đến nay:Sơ đồ trang web động trong 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);
}
}
Ví dụ, giả sử tôi có hai bộ điều khiển, và mỗi bộ điều khiển có hai hành động liên kết với chúng:
HelpController
- Sửa
- Tạo
AboutController Công ty
- Quản lý
tôi dường như không thể tìm ra cách để có được một danh sách như của URL:
- http://localhost/help/edit
- http://localhost/help/create
- http://localhost/about/company
- http://localhost/about/management
Gần đây, giống như câu trả lời từ @ eduncan911, giải pháp tốt nhất là sử dụng http://mvcsitemap.codeplex.com/ dự án đang hoạt động và cập nhật, hỗ trợ cắt an ninh và sẽ tạo sitemap.xml. Nó cũng có thể tự động nén sơ đồ trang web nếu tác nhân hỗ trợ cho nó và phân tách sơ đồ trang web thành các sơ đồ trang web phụ nếu trang web quá lớn vì tiêu chuẩn sitemap.xml chỉ có giới hạn đối với các nút 50k. – CallMeLaNN
Cảm ơn CallMeLaNN. Gần đây tôi đã cập nhật câu trả lời để liệt kê các điểm đó và hơn thế nữa, cũng như liệt kê trang web mà nó đã chuyển đến. – eduncan911