因此,假设我为我很酷的新 ASP.NET MVC 应用程序定义了以下 2 条路由:
{controller}/{action}/{id}
{controller}/{action}/{page}
除了最后一个命名的路段外,两条路线都具有完全相同的模式。最后命名的段也是可选的 - 这在示例中不清楚,但认为它们是可选的。
如果我按照我列出的顺序将路由添加到框架的RouteCollection
中,第一条路由将始终匹配这样的 URL:/Home/Index/1
通常这不是问题,但是 ASP.NET MVC 的默认模型绑定器在将参数作为参数传递给动作时,要求动作的参数与路由模式中的命名段具有相同的名称。
因此,对于一个动作List
,例如,我想拉出一个模型列表以传递给视图,它接受页码作为参数,我需要命名该参数id。同样通常,这不是问题,但我是个详细的人,我喜欢我的参数名称来指示参数的用途。
但是由于模型绑定器是在路由系统之后启动的,所以我很不走运。还是我?有没有办法解决这个问题而不编写我自己的模型绑定器,或者更糟糕的是,我自己的路由器?
此外,这可以被认为是第二个相关问题,我如何确保路由命名段是重构安全的?
例如,在我看来,鼓励使用Url.Action
,因为它们会考虑路线。但是要在使用此方法生成 URL 时传递参数,通常必须传入一个匿名对象,该对象的名称也与命名段相同。
因此,如果我重命名路由中的命名段,我实际上必须转到我的所有视图并重命名该属性。这听起来并不理想。那么解决这个问题的干净方法是什么?