我正在尝试让我的 Controller 操作之一接收这样的 URL 请求:
/Traveller/Book/28/01/2015
/Traveller/Book/01/02/2015
... etc ...
所以我为我的 Controller 操作编写了一个 Route
属性,如下所示:
[Route(@"Traveller/Book/{date:regex(^\d{2}/\d{2}/\d{4}$)}")]
public ActionResult Book(string date, TravellerBookingViewModel viewModel)
{
// ...
}
我还通过将以下内容添加到 RouteConfig.cs
中的 RegisterRoutes
方法,让我的应用程序查看 Route
属性:
routes.MapMvcAttributeRoutes();
尽管采取了这些步骤,我的应用程序仍然没有将对上述示例 URL 的请求路由到我的 Controller 操作,而是返回 404。我很困惑为什么这是因为当我通过任何正则表达式工具运行它。
编辑:可能还值得注意的是,将 Route
属性更改为:
[Route(@"Traveller/Book/test")]
当我向 /Traveller/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) 转义。
关于c# - 应用 dd/mm/yyyy 格式通过正则表达式进行路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28203998/