C# 带有自定义路由的MVCSitemapProvider问题

C# 带有自定义路由的MVCSitemapProvider问题,c#,asp.net-mvc,mvcsitemapprovider,asp.net-mvc-sitemap,C#,Asp.net Mvc,Mvcsitemapprovider,Asp.net Mvc Sitemap,我很难使用MVCSitemapProvider生成站点地图我的案例如下: 我有这个: routes.MapRoute("Blog", "Blog/{id}/{seoName}", new { controller = "Blog", action = "ViewBlog", seoName = "" }, new { id = @"^\d+$" }); 我用这个作为我控制器的心房药 [MvcSiteMapNode(Title = "Blog", Key = "View

我很难使用MVCSitemapProvider生成站点地图我的案例如下:

我有这个:

 routes.MapRoute("Blog", "Blog/{id}/{seoName}", new { controller = "Blog", action = "ViewBlog", seoName = "" }, new { id = @"^\d+$" });
我用这个作为我控制器的心房药

            [MvcSiteMapNode(Title = "Blog", Key = "ViewBlog", ParentKey = "Blog",Route="Blog")]
问题在于sitemap.xml包含以下内容:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://localhost:7872/</loc>
</url>
<url>
<loc>http://localhost:7872/#</loc>
</url>
<url>
<loc>http://localhost:7872/Blog</loc>
</url>
<url>
<loc>http://localhost:7872/Home/About</loc>
</url>
</urlset>

http://localhost:7872/
http://localhost:7872/#
http://localhost:7872/Blog
http://localhost:7872/Home/About
我的路由正在映射到此URL:
http://localhost:7872/#
当我使用route=Blog时

应该是这样的:
localhost:7872/blog/idhere/friendurlName

该网址工作良好,但我正在努力提高搜索引擎优化和网站地图是非常必要的 我不知道如何设置这个。有什么想法吗?

您应该使用一个节点将每一篇博客文章变成一个单独的节点。您还需要向MvcSiteMapProvider注册“id”和“seoName”路由参数,否则它将无法匹配路由或生成正确的URL

[MvcSiteMapNode(DynamicNodeProvider = "MyNamespace.BlogDynamicNodeProvider, MyAssembly", Route = "Blog")]
public ActionResult ViewBlog(int id, string seoName)
{
    // Retrieve your blog post here...

    return View();
}
在项目中的代码文件中

public class BlogDynamicNodeProvider : DynamicNodeProviderBase
{
    public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node)
    {
        // BlogEntities would be your entity framework context class
        // or repository.
        using (var entities = new BlogEntities())
        {
            // Create a node for each blog post
            foreach (var blogPost in entities.BlogPosts)
            {
                DynamicNode dynamicNode = new DynamicNode();
                dynamicNode.Title = blogPost.Title;
                dynamicNode.ParentKey = "Blog";
                dynamicNode.Key = "BlogPost_" + blogPost.Id;
                dynamicNode.RouteValues.Add("id", blogPost.Id);
                dynamicNode.RouteValues.Add("seoName", blogPost.SeoName);

                yield return dynamicNode;
            }
        }
    }
}
公共类BlogDynamicNodeProvider:DynamicNodeProviderBase
{
公共重写IEnumerable GetDynamicNodeCollection(ISiteMapNode节点)
{
//BlogEntities将是您的实体框架上下文类
//或存储库。
使用(var entities=new bloggentities())
{
//为每个博客文章创建一个节点
foreach(entities.blogPost中的var blogPost)
{
DynamicNode DynamicNode=新的DynamicNode();
dynamicNode.Title=blogPost.Title;
dynamicode.ParentKey=“Blog”;
dynamicNode.Key=“BlogPost\ux”+BlogPost.Id;
添加(“id”,blogPost.id);
dynamicNode.RouteValues.Add(“seoName”,blogPost.seoName);
收益动态模型;
}
}
}
}