UrlHelper.Action没有生成漂亮的网址

时间:2014-07-28 08:28:30

标签: asp.net-mvc url-routing pretty-urls

我使用此自定义路线生成了SEO友好的“漂亮网址”,灵感来自posts here on stackoverflow

// Route used for Details view
routes.Add("CarDetailsRoute", new SeoFriendlyRoute(
    url: "car/{state}/{community}/{make}/{model}/{slug}-{id}",
    valuesToSeo: new string[] { "state", "community", "make", "model", "slug" },
    defaults: new RouteValueDictionary(new { controller = "Vehicle", action = "Details", slug = UrlParameter.Optional, state = UrlParameter.Optional, community = UrlParameter.Optional, make = UrlParameter.Optional, model = UrlParameter.Optional }),
    constraints: new RouteValueDictionary(new { id = @"\d+" })
));

/// The interesting route
routes.Add("CarIndexRoute", new SeoFriendlyRoute(
    url: "car/{state}/{community}/{make}/{model}/",
    valuesToSeo: new string[] { "state", "community", "make", "model" },
    defaults: new RouteValueDictionary(new { controller = "Vehicle", action = "Index", state = UrlParameter.Optional, community = UrlParameter.Optional, make = UrlParameter.Optional, model = UrlParameter.Optional })
));

// Unrelated routes

// Fallback default route
routes.Add("Default", new SeoFriendlyRoute(
    url: "{controller}/{action}/{id}",
    valuesToSeo: new string[] { "action", "controller" },
    defaults: new RouteValueDictionary(new { controller = "Home", action = "Index", id = UrlParameter.Optional }))
);

但是,当我从“详细信息”视图生成面包屑以生成部分详细信息的通用搜索时,自定义路径会以某种方式失败并启动默认路径。

// RequestContext here being a full qualified with Make, Model, Community
// and State. These are inserted in to all .Action()s by default, so i have
// to "remove them" where I don't want them.
var url = new UrlHelper(Request.RequestContext); 
var breadcrumbs = new List<IBreadcrumbLink>() {
    new BreadcrumbLink() {
        Title = vehicle.Dealer.State,
        Url = url.Action("Index", new { model = string.Empty, make = string.Empty, community = string.Empty })
        // Doesn't work, generates ~/vehicle/?model=aaa&make=bbb&community=ccc&state=ddd
        // Expected ~/car/state/
    }, 
    new BreadcrumbLink() {
        Title = vehicle.Dealer.Community,
        Url = url.Action("Index", new { model = string.Empty, make = string.Empty })
        // Works, generates ~/car/state/community/
    }, 
    new BreadcrumbLink(){
        Title = vehicle.Make,
        Url = url.Action("Index", new { model = string.Empty })
        // Works, generates ~/car/state/community/make/
    },
    new BreadcrumbLink(){
        Title = vehicle.Model,
        Url = url.Action("Index")
        // Works, generates ~/car/state/community/make/model/
    }
};

什么会导致这种行为?访问~/car/state/的预期网址就像魅力一样,但如上所述,我无法生成此网址?

0 个答案:

没有答案