【问题标题】:ASP.NET MVC routing by string id?ASP.NET MVC 通过字符串 id 路由?
【发布时间】:2011-10-01 03:51:36
【问题描述】:

在 ASP.NET 2 中,如何创建允许通过字符串 id(例如 ProductCode)查找对象(例如 Product)的路由?通过整数 id(例如 ProductId)查找同一个对象的路径是自动的,所以我实际上并不知道它是如何工作的。

id 的自动路由是:

/Product/1

如何创建使用字符串 id 的第二条路由?

/Product/red-widget

我该怎么做才能使两条路线都可用?

【问题讨论】:

    标签: asp.net-mvc routes asp.net-mvc-routing


    【解决方案1】:

    您应该看看使用路由约束来执行此操作。见http://www.asp.net/mvc/tutorials/creating-a-route-constraint-cs

    routes.MapRoute(
        "Product",
        "Product/{productId}",
        new {controller="Product", action="DetailsByName"},
        new {productId = @"\w+" }
     );
    

    在上面,约束正则表达式“\w+”应限制为仅匹配“单词”字符的路由(请查看正则表达式文档以获取有关此处使用的模式的更多详细信息)。

    【讨论】:

    • 并且一定要放在默认路由之前,否则永远打不到。
    • 不幸的是,这会破坏我的几个自动路由,因为它们与正则表达式匹配,例如 /Product/List 等。我需要在这个新路由之前为 List 添加路由吗?如何创建基本路线?因为它们是自动的,我实际上不知道如何。
    • 是的,您必须订购东西,因为将使用匹配的第一条路线。默认路由匹配 {controller}/{action}/{id}。您可以在此之前明确列出路线,例如 {controller}/list/ 或 {controller}/otherAction/{id} 并且这些路线将首先匹配(仅当路径的第二段是“list”或“otherAction”时)。
    • 抱歉,它不起作用:/Product/1 将新路由与正则表达式匹配。 \w+ 是否可能包含数字?
    • 我的错,是的 \w 也匹配数字...regular-expressions.info/reference.html
    猜你喜欢
    • 2011-04-25
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2011-04-19
    • 1970-01-01
    • 2020-12-28
    相关资源
    最近更新 更多