0

因此,假设我为我很酷的新 ASP.NET MVC 应用程序定义了以下 2 条路由:

  • {controller}/{action}/{id}
  • {controller}/{action}/{page}

除了最后一个命名的路段外,两条路线都具有完全相同的模式。最后命名的段也是可选的 - 这在示例中不清楚,但认为它们是可选的。

如果我按照我列出的顺序将路由添加到框架的RouteCollection中,第一条路由将始终匹配这样的 URL:/Home/Index/1

通常这不是问题,但是 ASP.NET MVC 的默认模型绑定器在将参数作为参数传递给动作时,要求动作的参数与路由模式中的命名段具有相同的名称。

因此,对于一个动作List,例如,我想拉出一个模型列表以传递给视图,它接受页码作为参数,我需要命名该参数id。同样通常,这不是问题,但我是个详细的人,我喜欢我的参数名称来指示参数的用途。

但是由于模型绑定器是在路由系统之后启动的,所以我很不走运。还是我?有没有办法解决这个问题而不编写我自己的模型绑定器,或者更糟糕的是,我自己的路由器?

此外,这可以被认为是第二个相关问题,我如何确保路由命名段是重构安全的?

例如,在我看来,鼓励使用Url.Action,因为它们会考虑路线。但是要在使用此方法生成 URL 时传递参数,通常必须传入一个匿名对象,该对象的名称也与命名段相同。

因此,如果我重命名路由中的命名段,我实际上必须转到我的所有视图并重命名该属性。这听起来并不理想。那么解决这个问题的干净方法是什么?

4

1 回答 1

1

在传入的请求中,RouteCollection将选择Route正则表达式逻辑匹配的第一个。

不幸的是,我确实认为您在如此高层次的观点上并不走运。

但是,如果您设置某种约束,您可能能够调整自己的方式来匹配第二条路线。

于 2012-10-31T14:15:22.287 回答