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

标签 c# asp.net regex routes asp.net-mvc-5

我正在尝试让我的 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/

相关文章:

c# - 一个 Where() 子句中的多个 Any() LINQ

c# - 将可运行脚本添加到 ASP.NET Core 应用程序

c# - 为什么在 get 方法之前需要 IEnumerable<string> ?

C# Windows 服务在哪里保存设置 Properties.Setting

c# - Microsoft.Bot.Schema.ErrorResponseException : Operation returned an invalid status code 'BadRequest'

html - 如何根据列表中的项目数量在 div 标签内添加新的 html 元素?

asp.net - 哪里有服务器变量或 <allowedServerVariables> 的列表?

java - 该模式合适的正则表达式是什么?

Python 从 HTTP 响应中提取 JSON

java - 新加坡地址的正则表达式