我正试图让我的一个控制器操作接收这样的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)
{
// ...
}
我还通过在Route
中的RegisterRoutes
方法中添加以下内容,让我的应用程序查看RouteConfig.cs
属性:
routes.MapMvcAttributeRoutes();
尽管采取了这些步骤,我的应用程序仍然没有将上述示例URL的请求路由到我的控制器操作,而是返回404.我很困惑为什么这是因为正则表达式似乎匹配当我通过任何正则表达式工具运行它。
编辑:可能还需要注意将Route
属性更改为:
[Route(@"Traveller/Book/test")]
当我向/Traveller/Book/test
提出请求时也无效。
答案 0 :(得分:1)
Slash用于分隔url段,这意味着除非编码(%2f
),否则一个段不能包含斜杠。
您可以将日期格式更改为dd-mm-yyyy并使用
date:regex(\\d{2}-\\d{2}-\\d{4}
同时查看System.Web.Routing
您可以告诉路由值不是使用HttpUtility.UrlEncode(var)进行URL编码,而是使用Uri.EscapeUriString(var)进行转义。