C# 通过正则表达式将dd/mm/yyyy格式应用于路由
我正试图让我的一个控制器操作拾取URL请求,如下所示: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
/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传递给控制器。