Asp.net mvc 5 使用MVC属性路由生成MvcSiteMapProvider站点地图

Asp.net mvc 5 使用MVC属性路由生成MvcSiteMapProvider站点地图,asp.net-mvc-5,sitemap,mvcsitemapprovider,Asp.net Mvc 5,Sitemap,Mvcsitemapprovider,我正在从事一个MVC5项目,我需要创建一个站点地图 我已使用控制器操作上的“路由”属性创建了路由 我正在使用MvcSiteMapProvider文档中指定的动态节点提供程序,它对我的一个控制器运行良好,但是对于另一个控制器,它显示每个映射路由的查询字符串参数,例如 我越来越 www.url.com?SelectedCulture=en gb 当我怀孕的时候 www.url.com/en-gb 我的路线都工作良好,如果我使用我的应用程序,它也工作良好。。。它只是没有创建一个我期待的网站地图 我创建

我正在从事一个MVC5项目,我需要创建一个站点地图

我已使用控制器操作上的“路由”属性创建了路由

我正在使用MvcSiteMapProvider文档中指定的动态节点提供程序,它对我的一个控制器运行良好,但是对于另一个控制器,它显示每个映射路由的查询字符串参数,例如

我越来越

www.url.com?SelectedCulture=en gb

当我怀孕的时候

www.url.com/en-gb

我的路线都工作良好,如果我使用我的应用程序,它也工作良好。。。它只是没有创建一个我期待的网站地图

我创建的动态提供程序正在填充与路由匹配的必需属性

有人有什么想法吗

这是我的Mvc.sitemapXML

<mvcSiteMapNode title="ATitle" controller="Parent" action="Index" key="Home">
<mvcSiteMapNode title="ASubTitle" controller="Parent" action="Index" key="CulturePages">
</mvcSiteMapNode>

谢谢

多么尴尬啊。。。问题在于节点提供程序中的路由值id拼写错误

我从未使用过AttributeRouting,但据我所知,它的工作原理非常类似于在RouteConfig类中声明路由

路由有两部分:1)解析传入URL以匹配一组RouteValue;2)解析一组RouteValue中的传出URL。您需要确保正确配置传出URL(有时称为出站URL),以便MvcSiteMapProvider生成正确的URL

如中所述,URL由MVC框架的UrlHelper类解析。您可以在控制器操作中使用以下代码,查看是否可以使用MVC生成正确的URL,然后再反向工作。我建议您首先使用RouteConfig类配置路由,确保获得正确的URL,然后尝试找到用于AttributeRouting的等效表达式(可能是通过

// Using controller and action
var urlHelper = new UrlHelper(new System.Web.Routing.RequestContext(this.HttpContext, this.RouteData));
var url = urlHelper.Action("Index", "Parent", new System.Web.Routing.RouteValueDictionary { { "SelectedCulture", "en-gb" } });
注意:如果使用内置本地化和参数,而不是如中所述为每个区域性创建节点,则可以使MvcSiteMapProvider的缩放效果更好


谢谢你详尽的回答。这是我一个愚蠢的打字错误!
[MvcSiteMapNodeAttribute(Title = "Sites", Key = "Sites", ParentKey = "HomePages", DynamicNodeProvider = "TestProject.Models.SitePagesDynamicProvider, TestProject")]
    [Route("{SelectedCulture:regex(^([a-z]|[A-Z]){2}-([a-z]|[A-Z]){2}?$)?}/")]
    public ActionResult Index(string SelectedCulture)
    {
       return View();
    }
// Using controller and action
var urlHelper = new UrlHelper(new System.Web.Routing.RequestContext(this.HttpContext, this.RouteData));
var url = urlHelper.Action("Index", "Parent", new System.Web.Routing.RouteValueDictionary { { "SelectedCulture", "en-gb" } });