【问题标题】:Can I constrain a route parameter to a certain type in ASP.net MVC?我可以将路由参数限制为 ASP.net MVC 中的某种类型吗?
【发布时间】:2010-05-28 11:39:35
【问题描述】:

我有以下路线:

routes.MapRoute(
    "Search",                                               // Route name
    "Search/{affiliateId}",                                 // URL with parameters
    new { controller = "Syndication", action = "Search" }   // Parameter defaults
);

有没有办法可以确保“affiliateId”是有效的 Guid?我在我网站的其他地方使用 MVCContrib,我很公平,它提供了一种实现这种约束的方法....我只是不知道它是什么!

【问题讨论】:

  • 所以你想在匹配路由之前确保affiliateId是一个Guid,对吗?或者您想在执行搜索操作之前确保affiliateId 是 Guid?
  • 如果affiliateId 是Guid,我只希望路由匹配,是的。如果它不是 guid,则不应执行 Search 操作。谢谢。

标签: asp.net-mvc routing constraints mvccontrib


【解决方案1】:

您可以编写正则表达式约束:

routes.MapRoute(
    "Search",                                               // Route name
    "Search/{affiliateId}",                                 // URL with parameters
    new { controller = "Syndication", action = "Search" },   // Parameter defaults
    new { affiliateId = "SOME REGEX TO TEST GUID FORMAT" } // constraints
);

【讨论】:

  • 嗯,谢谢。不过,我希望有一些不那么脆弱的东西。
  • @Paul Suart:如果affiliateId 只是一个数字参数,那么您的正则表达式就是"\d",您就可以开始了。为什么你认为它很脆?
  • 它是一个 guid,所以正则表达式比 "\d" 更复杂。还是谢谢。
  • 嗯,对我来说似乎没有那么复杂。谷歌的第一个结果:google.com/…
【解决方案2】:

我从来没有听说过这个。如果您在其中一种操作方法中错误地为 affiliateId 参数使用了错误的类型,我担心会引起一些混乱。

【讨论】:

  • 我认为将路线限制到某个结构的情况并不少见。正如另一张海报所述,我可以使用正则表达式,这是一种已知且记录在案的方法,可确保仅在 url 具有某种格式时才匹配路由。我是个好人,所以没有-1 :)
  • 好的,看到你上面的澄清后,我相信我误解了你。您是否正在寻找两条路线,例如Search\{affiliateId}Search\{query}?如果是这样,我认为正则表达式路线是最好的。或者,您的搜索操作可以接受一个字符串参数,然后调用适当的代码来搜索与关联公司。
猜你喜欢
  • 2016-01-08
  • 2014-05-03
  • 2013-06-15
  • 1970-01-01
  • 2011-11-22
  • 2021-03-06
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多