1

我正在使用这个自定义路由生成对 SEO 友好的“漂亮 URL”,灵感来自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/
    }
};

什么会导致这种行为?访问预期的 url~/car/state/就像一个魅力,但如上所述我不能生成这个 url?

4

0 回答 0