ASP.MVC路由无Details操作
我希望网址甚至比/ {Controller} / {Action} / {Id}更短。
例如,我想{Controller} / {Id},其中{Id}是一个字符串。
这将允许简单的路径,例如用户/用户名,页面/页面名称,新闻/新闻名称。 我喜欢这样比在URL(用户/详细信息/用户名)中要求/ Details操作更好,这对于最终用户来说不够优雅。
我可以通过为任何我想要这种级别的控制器设置自定义路由来轻松完成这项工作。 但是,当执行其他操作(如{Controller} / {Action},其中{Action} ='Create')时会引起头痛,因为在这种情况下,字符串{Action}会与字符串{Id}发生冲突。
我的问题是:如何获得'保留'的单词,这样如果URL是/ News / Create,它将被视为一个动作,但如果URL是其他内容,例如/ News / A-gorilla-ate-my-论文,那么它被视为一个Id。
我希望在设置我的路线时可以定义这一点?
更新:
使用Ben Griswold的回答,我已将默认的ASP.NET MVC路由更新为:
routes.MapRoute(
"CreateRoute", // route name
"{controller}/Create", // url with parameters
new { action = "Create" } // parameter defaults
);
routes.MapRoute(
"DetailsRoute", // route name
"{controller}/{id}", // url with parameters
new { action = "Details" } // parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
这是一种魅力和手段,默认情况下,详细信息页面将使用简化的URL,但如果需要(更新/删除/详细信息),我仍然可以针对特定的操作。
当然,您需要禁止保留的“创建”字样,否则用户可能会尝试创建一篇文章,例如名称为“创建”的文章,该文章永远无法访问。
这真的很好。 如果有人发现这种方法有什么问题,请加入,但我很喜欢。
我认为你应该为每个保留字创建一个路线。 例如,
routes.MapRoute("CreateRoute",
"{controller}/Create",
new { action = "Create" }
);
会处理/新闻/创建,/用户/创建等。只要这条路线在您的其他自定义路线之前列出,我认为你已经覆盖。
我想你会需要为各种CRUD操作添加路线,这些操作将遵循类似的模式。
链接地址: http://www.djcxy.com/p/45129.html上一篇: ASP.MVC routes without Details action
下一篇: git remote branch bringing to local with different ssh machine