Asp.net 动态站点地图,数据库驱动

Asp.net 动态站点地图,数据库驱动,asp.net,mysql,dynamic,sitemap,Asp.net,Mysql,Dynamic,Sitemap,我已经为此挣扎了几天了。找不到好的例子,或者我能理解的例子 背景: 我自己有一个小博客平台供用户浏览博客。 每个用户都有自己的子域,目前还没有可用的站点地图。不好的。 我想创建某种动态站点地图,其中所有站点地图节点都是从数据库中检索的。网站地图将仅用于搜索引擎爬行器。 系统:ASP.NET,mySQL 站点地图是纯XML的。因此,我需要以某种方式创建一个返回xml数据而不是html的ASPX文件。 我需要以某种方式将web.sitemap重定向到该动态文件 我从未使用过XML,我不知道如何创建一

我已经为此挣扎了几天了。找不到好的例子,或者我能理解的例子

背景: 我自己有一个小博客平台供用户浏览博客。 每个用户都有自己的子域,目前还没有可用的站点地图。不好的。 我想创建某种动态站点地图,其中所有站点地图节点都是从数据库中检索的。网站地图将仅用于搜索引擎爬行器。 系统:ASP.NET,mySQL

站点地图是纯XML的。因此,我需要以某种方式创建一个返回xml数据而不是html的ASPX文件。 我需要以某种方式将web.sitemap重定向到该动态文件

我从未使用过XML,我不知道如何创建一个创建XML数据的文件。所以我甚至不知道该找什么。 我不想在服务器上存储任何静态站点地图文件。一切都应该在动态中创造

所以。请如果你能给我一些关于XML的建议,互联网上的任何例子,或者只是搜索什么

我的主要问题是:

一,。 如何从aspx文件创建XML输出

二,。 如何“通知”系统和搜索引擎爬虫要爬网的文件是“/sitemap.aspx”


谢谢

我查看了mvcsitemprovider.MVC5,但无法使其工作。首先,它修改了我的Web.config,使我的css和js文件在运行我的Web应用程序时找不到404

随着我花时间让MvcSiteMapProvider工作,我本可以自己写一本

所以。。。下面是我自己生成站点地图xml的简化版本。 唯一的问题是你必须手动指定你的路线。我还没有添加反射来遍历每个控制器并拉出每个动作

不过,数据驱动的部分工作得非常好

在主控制器中,添加操作站点地图和私有助手方法。 GetRouteUrls是手动添加的控制器/操作路由。 GetDynamicCurls构建数据驱动的URL。在我的示例中,我有一个LiquidsController和一个Details(stringid)操作

XmlActionResult返回类型可在以下位置找到:

我相信下面的文章会帮助您,如果您将该链接作为答案发布,我会将其标记为我问题的答案。如果你想:D
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"});