C# 通过正则表达式将dd/mm/yyyy格式应用于路由

C# 通过正则表达式将dd/mm/yyyy格式应用于路由,c#,asp.net,regex,routing,asp.net-mvc-5,C#,Asp.net,Regex,Routing,Asp.net Mvc 5,我正试图让我的一个控制器操作拾取URL请求,如下所示: /Traveller/Book/28/01/2015 /Traveller/Book/01/02/2015 ... etc ... 因此,我为控制器操作编写了一个Route属性,如下所示: [Route(@"Traveller/Book/{date:regex(^\d{2}/\d{2}/\d{4}$)}")] public ActionResult Book(string date, TravellerBookingViewModel v

我正试图让我的一个控制器操作拾取URL请求,如下所示:

/Traveller/Book/28/01/2015
/Traveller/Book/01/02/2015
... etc ...
因此,我为控制器操作编写了一个
Route
属性,如下所示:

[Route(@"Traveller/Book/{date:regex(^\d{2}/\d{2}/\d{4}$)}")]
public ActionResult Book(string date, TravellerBookingViewModel viewModel)
{
    // ...
}
我还通过将以下内容添加到
RouteConfig.cs
中的
registerOutes
方法,使我的应用程序查看
Route
属性:

routes.MapMvcAttributeRoutes();
尽管采取了这些步骤,我的应用程序仍然不会将上述示例URL的请求路由到我的控制器操作,而是返回404。当我通过任何正则表达式工具运行它时,正则表达式似乎匹配,所以我不明白为什么会这样

编辑:可能还值得注意的是,将
Route
属性更改为:

[Route(@"Traveller/Book/test")]

当我请求
/traveler/Book/test

时,也不起作用。斜杠用于分隔url段,这意味着一个段不能包含斜杠,除非对其进行编码(
%2f

您可以将日期格式更改为dd mm yyyy并使用

date:regex(\\d{2}-\\d{2}-\\d{4}

同时查看
System.Web.Routing
您可以看出,路由值不是使用HttpUtility.UrlEncode(var)进行URL编码的,而是使用Uri.EscapeUriString(var)进行转义的。

我想这需要您为3个不同的对象指定日期。是否可以指定不带分隔符的日期?或者用一些没有特殊意义的东西?比如2015年1月2日
Traveler/Book/test
在使用或不使用正则表达式的情况下都不起作用?谢谢@NadiaChibrikova的评论,但请查看我的编辑。应用程序似乎忽略了我使用的任何
Route
属性:/I认为您应该在正则表达式中转义斜杠,因此:“\d{2}\/\d{2}\/\d{4}$”不需要,我在字符串前面加了
@
。Sebastian,您可以看看这个问题吗?是关于一个类似的问题,其中datetime虽然已编码,但作为null传递给控制器。