2

我想为具有正常 CRUD 操作的控制器设置路由,但希望详细信息操作不在 URL 中显示“详细信息”。Stackoverflow 似乎配置了这种类型的路由:

http://stackoverflow.com/questions/999999/
http://stackoverflow.com/questions/ask

使用这个类比,我的路线目前看起来像:

http://stackoverflow.com/questions/Details/999999/

通过添加以下路线,我能够被Details删除:

routes.MapRoute("Q1", "questions/{id}", 
    new { controller = "Questions", action = "Details" });

但是,拉起控制器上的其他操作(例如/questions/new对于此示例)抱怨无法解析 id。

有没有办法设置路线,这样我就不必手动将所有其他操作(MapRoute“items/create”、“items/delete”等)手动输入到 Global.asax.cs 中?我基本上希望有第二条路线,例如:

routes.MapRoute("Q2", "questions/{action}", 
    new { controller = "Questions", action = "Index" });

{id}...如果匹配一个整数,并且{action}如果它是一个字符串,则让路由引擎使用路由 Q1 。这可能吗?

4

1 回答 1

6

如果您在第一个上设置路由约束,以便 id 字段只能是整数,那么我相信任何其他操作都将采用默认设置。

routes.MapRoute("Q1", 
   "questions/{id}", 
   new {controller = "Questions", action = "Details"},
   new { id=@"\d+" });

其他任何事情都应该由默认路由处理。所以“questions/3553”会命中这个,但“questions/ask”会不匹配。您可能希望将更具体的路线放在您的 Global.asax.cs 文件中。

于 2009-06-16T12:50:42.350 回答