asp.net mvc 2中面向对象的url方案

时间:2010-11-25 08:45:33

标签: asp.net-mvc asp.net-mvc-2 url url-routing

我想修改标准的ASP.NET MVC URL路由

http://example.com/Controller/Action[/Id]

类似于:

http://example.com/Controller/Id/Action

修改路由方案很简单,但在处理默认值时遇到了麻烦。我需要这些网址

http://example.com/Controller/ -> Maps to Index() -> List of items
http://example.com/Controller/Create
http://example.com/Controller/Id[/Details] -> Maps to Details(id)
http://example.com/Controller/Id/Edit -> Maps to Edit(id)
http://example.com/Controller/Id/Delete -> Maps to Delete(id)

糟糕!这意味着相当多的路线,而不是漂亮的默认路线。或者我可以在URL中间使用带有默认值的URL参数吗?

下一步是使用友好(但唯一!)对象引用(例如客户名称。假设它是唯一的)而不是DB记录标识(id)。如:

http://example.com/Controller/Name[/Details] -> Maps to Details(id)

到目前为止一直很好,但我不确定将它用于编辑(可能是删除)页面是个好主意:编辑表单允许用户修改对象名称,从而导致URL中可能不匹配。我应该坚持编辑网址中的ID吗?

有没有人遇到过这样的网址?你是否将这个想法推向了分层系统?这是一个好主意还是我会陷入更多麻烦而不是福利?

TIA表示您的想法。

2 个答案:

答案 0 :(得分:2)

仅当ID参数始终存在于URL中时,才能执行此操作。由于显而易见的原因,可选参数只能位于网址的末尾,或者无法消除歧义。

答案 1 :(得分:-1)

试试这个:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{id}/{action}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

默认情况下,控制器会回家,并会启动其他方面没有说明的索引操作。 Id也是可选的。我实际改变的只是参数的顺序。

至于问题的结果。如果你是用户被记录并且他们编辑他们的个人资料,例如你可以从其他地方获得编辑内容的ID - 例如一个cookie。我在用户管理中这样做。 URL / User / Edit对于已登录的用户是唯一的。