我遇到了问题
我的路线在分层类别后有一个额外的参数。
/ 2009 /世界/亚/ 08/12 / BLA-BLA-BLA
asp.net mvc不支持这个,因为我的路由应该是
{一年} / {*类别} / {月} / {天} / {名}
我尝试使用像
这样的约束year = @"(\d{4})",category = @"((.+)/)+", month = @"(\d{2})", day = @"(\d{2})"
但我找不到任何解决方案。
有评论吗?
谢谢
答案 0 :(得分:1)
我很确定路由处理程序会对斜杠字符进行标记,因此您将无法使用包含斜杠的类别 - 尽管可以使用它,但不确定。您可能希望将您的网址格式设置为:
/2009/World+Asia/08/12/bla-bla-bla
这应该将该类别翻译为“世界亚洲”。
如果这不起作用,那么也许你需要另一条与子类别相匹配的路线。
{year}/{category}/{subcategory}/{month}/{day}/{name}
答案 1 :(得分:0)
使用name参数为路由添加另一条规则。
答案 2 :(得分:0)
如果我理解得很好,你想限制并对值进行一些约束可以作为路由部分传递,你可以使用Route Constraint来实现。 Plaese读了Creating a Route Constraint (C#),你会发现这是可能的。你可以这样做:
routes.MapRoute(
"Product",
"Product/{productId}",
new {controller="Product", action="Details"},
new {productId = @"\d+" }
);
正则表达式 \ d + 匹配一个或多个整数。此约束导致Product路由与以下URL匹配:
/产品/ 3
/产品/ 8999
但不是以下网址:
/产品/苹果
/产品
另外您可以编写自定义路由约束,请阅读Creating a Custom Route Constraint (C#)并查看我刚从This post by Guy Burstein复制的示例,我认为您觉得它很有用:
public class FromValuesListConstraint : IRouteConstraint
{
public FromValuesListConstraint(params string[] values)
{
this._values = values;
}
private string[] _values;
public bool Match(HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection)
{
// Get the value called "parameterName" from the
// RouteValueDictionary called "value"
string value = values[parameterName].ToString();
// Return true is the list of allowed values contains
// this value.
return _values.Contains(value);
}
}
正如Guy所说:为了实现自定义路由约束,您应该创建一个继承自IRouteConstraint的类,并实现Match方法。
希望得到这个帮助。