我正在尝试解决seo友好网址的问题。以下是模板:
{city}和{area / district}都可以包含多个单词,空格被替换为' - '符号。
以下是几个例子:
默认路由机制似乎没有解决此问题。此外,还有一个很好的保留Html.RouteLink功能。
解决此问题的最佳方法是什么?
PS:我知道它更容易使用" / {state} / {city} /"模式但我现在无法使用它。
答案 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路线中更有知识的人将不得不插话。