asp.net-mvc – 使用默认控制器的ASP.NET MVC路由

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 使用默认控制器的ASP.NET MVC路由前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于一个场景,我有一个ASP.NET MVC应用程序,其URL包含以下内容
http://example.com/Customer/List
http://example.com/Customer/List/Page/2
http://example.com/Customer/List
http://example.com/Customer/View/8372
http://example.com/Customer/Search/foo/Page/5

这些URL是通过Global.asax.cs中的以下路由实现的

routes.MapRoute(
    "CustomerSearch","Customer/Search/{query}/Page/{page}",new { controller = "Customer",action = "Search" }
);

routes.MapRoute(
    "CustomerGeneric","Customer/{action}/{id}/Page/{page}",new { controller = "Customer" }
);

//-- Default Route
routes.MapRoute(
    "Default","{controller}/{action}/{id}",action = "Index",id = "" }
);

这些都很顺利,直到新的要求到达,并希望将关键字“客户”从网址中删除,以使URL看起来像:

http://example.com/List
http://example.com/List/Page/2
http://example.com/List
http://example.com/View/8372
http://example.com/Search/foo/Page/5

编辑:更正示例链接,感谢@haacked.

我试图添加新的MapRoutes来采取{action},并将默认控制器设置为Customer.例如/

routes.MapRoute(
    "CustomerFoo","{action}",action = "Index" }
);

这似乎工作,但是现在Html.ActionLink()生成的所有链接都是奇怪的,不再是URL友好的.

那么这是可以实现的吗?我正走向正确吗?

解决方法

不要混合以下规则:“{action} / {id}”与“{controller} / {action} / {id}”的规则…特别是当后面的id具有默认值即可选时.

在这种情况下,您没有任何允许路由知道哪一个是正确的路由.

一个解决方法,如果这是你需要的,将是添加一个约束(参见this)到较早的一组值,即列表,视图中的操作.当然,使用这些类型的规则,您不能拥有一个具有相同名称的操作的控制器.

另请记住,如果您指定默认动作& “{action} / {id}”规则中的ID,当您点击您的站点的路由时将使用该规则.

猜你在找的asp.Net相关文章