SEO友好的URL与“ - ”

时间:2014-05-20 18:22:51

标签: asp.net-mvc routes seo asp.net-mvc-routing

我正在尝试解决seo友好网址的问题。以下是模板:

{city}和{area / district}都可以包含多个单词,空格被替换为' - '符号。

以下是几个例子:

默认路由机制似乎没有解决此问题。此外,还有一个很好的保留Html.RouteLink功能。

解决此问题的最佳方法是什么?

PS:我知道它更容易使用" / {state} / {city} /"模式但我现在无法使用它。

1 个答案:

答案 0 :(得分:1)

非常确定这种事情是通过路径约束来处理的。

这是一篇文章,展示了您正在尝试做的事情 http://www.codeproject.com/Articles/641783/Customizing-Routes-in-ASP-NET-MVC

这也是一个处理相同问题的SO问题 ASP.NET MVC regex route constraint

由于城市可以有空格导致多个破折号,您可能必须完全添加自己的自定义约束(继承自IRouteConstraint)然后在匹配方法中,只需要最后一个字符并转换他们从那里到你的州。第一个codepoject文章应该有一个自定义约束的例子。

这可能看起来像这样

<强> RouteConfig.cs

public static void RegisterRoutes(RouteCollection routes)
{
    //we're basically telling it to capture everything here with the {*customRoute},
    //then we're also passing that route to the Action
    routes.MapRoute("CityStates", "{*customRoute}",
        new { controller = "CityStateController", action = "MyAction", customRoute = UrlParameter.Optional},
        new { customRoute = new CityStateConstraint()});
}

<强> CityStateConstraint.cs

public class CityStateContraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values,
            RouteDirection routeDirection)
    {
        //return true if it is one of the city-states you handle
        //false otherwise
    }
}

在这个示例中,路线将被传递给您的行动,您可以处理从那里拆分城市和州...您可能想要这样做,因此它分别通过城市和州,以便您的行动更清洁。但希望这会给你一个想法。

也许有可能以更简单的方式做到这一点,但是在mvc路线中更有知识的人将不得不插话。