【问题标题】:Regex expression to validate an unquoted alphanumeric csv list in a attribute route regex constraint用于验证属性路由正则表达式约束中未加引号的字母数字 csv 列表的正则表达式
【发布时间】:2024-05-23 19:30:02
【问题描述】:

我正在寻找一种 RegEx 模式来验证 URL 中带有 CSV 参数的 属性路由

一个有效的 URL 应该是这样的(0 到 n 个元素的列表):

http://site/prefix/list/a,b1,c123[,...]

属性路由:

Route("List/{Items:alpha:regex(<pattern>)")

我在 RegEx 方面没有太多经验,而且对这种模式也没有太多运气。

【问题讨论】:

  • 为什么要使用正则表达式?您似乎正在尝试让路由引擎为您解析 CSV 字符串?如我错了请纠正我。我认为这不会奏效,即使这是个好主意。据我所知,路由模式只支持标量。
  • @mrjoltcola,这绝对是错误的。 csv 现在在属性路径中运行良好。我只是在寻找一种使用正则表达式路由约束来验证它的方法。
  • 好的,所以我成功地误读了这个问题两次。所以我会再试一次,从字面上看,你说 “我正在寻找一个 RegEx 模式来验证 URL 中带有 CSV 参数的属性路由” - 我放弃了,你在尝试验证参数,还是验证路由规则本身?
  • Route("List/{Items:alpha:regex()"}

标签: regex asp.net-mvc-5 asp.net-web-api2 asp.net-mvc-5.1


【解决方案1】:

我认为这是一种更好的方法来验证动作中的参数,而不是通过属性路由规则,因为路由规则不是一个有用的验证器,它不会给出任何当用户输入不匹配的数据时向用户反馈,相反,他们将获得 HTTP 404。但如果这确实是您想要的,这里有一个对我有用的示例:

http://localhost/list/movie1,movie 2,movie 3测试

    [Route(@"list/{movieCsv:regex(^[A-Za-z0-9, ]+$)}")]
    public ActionResult ListCsv(string movieCsv)
    {
       var movies = movieCsv.Split(',');
       return View(movies);
    }

视图(ListCsv.cshtml):

   <h2>Movies</h2>
   <ul>
   @foreach (var movie in Model)
   {
     <li>@movie</li>
   }
   </ul>

【讨论】:

  • 我在做一个属性路由。
  • 我正在传递一个由字母数字符号组成的未确定长度列表。这是一个游戏名称列表。比如“FooBar, Foo at Bar, Bar, The Longest Title You Can Think,Something 10, Something Else,Ad Nauseam” 名称本身没有规律。只是一个逗号分隔的不带引号的字母数字字符串列表。
  • 查看我修改后的答案。使用单个参数,并在操作中拆分。
  • 我可以毫无问题地使用已完成且正在工作的 CSV。我只想使用 Route 属性验证 URL。
  • 已修订。接受空格、逗号和字母数字。
最近更新 更多