应用dd / mm / yyyy格式通过正则表达式进行路由

时间:2015-01-28 22:55:02

标签: 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 viewModel)
{
    // ...
}

我还通过在Route中的RegisterRoutes方法中添加以下内容,让我的应用程序查看RouteConfig.cs属性:

routes.MapMvcAttributeRoutes();

尽管采取了这些步骤,我的应用程序仍然没有将上述示例URL的请求路由到我的控制器操作,而是返回404.我很困惑为什么这是因为正则表达式似乎匹配当我通过任何正则表达式工具运行它。

编辑:可能还需要注意将Route属性更改为:

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

当我向/Traveller/Book/test提出请求时也无效。

1 个答案:

答案 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)进行转义。

相关问题