我想修改标准的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表示您的想法。
答案 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对于已登录的用户是唯一的。