我看着MvcSiteMapProvider.MVC5,我无法让它工作。首先它修改我的Web.config,以至于我的css和js文件在运行我的web应用程序时找不到404。
随着时间我花了MvcSiteMapProvider工作,我可以写我自己的。
所以...这是我自己的生成站点地图xml的沉闷版本。 唯一的是你必须手动指定你的路线。我还没有添加反思,但要通过每个控制器并取消每个操作。
虽然数据驱动的作品效果很好。
在您的主页控制器中添加动作站点地图和专用帮助器方法。 GetRouteUrls是手动添加的控制器/操作路由。 GetDynamicUrls构建数据驱动的Url。在我的例子中,我有一个LiquidsController和一个Details(string id)动作。
public ActionResult Sitemap()
{
var xml = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement("urlset",
new XAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9")
, GetRouteUrls()
, GetDynamicUrls()
)
);
return new XmlActionResult(xml);
}
private List<XElement> GetDynamicUrls()
{
var result = new List<XElement>();
using (var db = new ApplicationDbContext())
{
var liquids = db.Liquids.ToList();
foreach (var liquid in liquids)
{
result.Add(LocUrl("Liquids", "Details", liquid.FriendlyId));
}
}
return result;
}
private List<XElement> GetRouteUrls()
{
var result = new List<XElement>();
result.Add(LocUrl("Account", "Register"));
result.Add(LocUrl("Account", "Login"));
result.Add(LocUrl("Home", "Index"));
result.Add(LocUrl("Home", "About"));
result.Add(LocUrl("Home", "Contact"));
result.Add(LocUrl("Home", "TermsOfService"));
result.Add(LocUrl("Home", "PrivacyStatement"));
result.Add(LocUrl("Liquids", "Index"));
result.Add(LocUrl("Vendors", "Index"));
result.Add(LocUrl("Hardware", "Index"));
return result;
}
private XElement LocUrl(string controller, string action, string id = null)
{
if (!string.IsNullOrEmpty(id))
action = string.Format("{0}/{1}", action, id);
var baseUri = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
return new XElement("url",
new XElement("loc", string.Format("{0}{1}/{2}", baseUri, controller, action))
);
}
我加入的路线,所以我可以访问网站地图做/网站导航
routes.MapRoute(name: "sitemap", url: "sitemap", defaults: new {controller = "Home", action = "Sitemap"});
的XmlActionResult返回类型可以在这里找到: Return XML from a controller's action in as an ActionResult?
我相信下面的文章将帮助你[ http://www.codeproject.com/Articles/16860/Building-a-dynamic-SiteMap-in-ASP-NET-2-0-for-a-la](http://www.codeproject.com/Articles/16860/Building-a-dynamic-SiteMap-in-ASP-NET-2-0-a-la) – mqpasta
mqpasta >>>谢谢。 – Easyrider
mqpasta >>>如果您将该链接发布为答案,我会将其标记为我的问题的答案。如果你想:D – Easyrider