我们有一个处理艺术家和 field 的网站,我们正在 ASP.net MVC 中开发它。
我们在一个文件夹 (Views/Artists/..)、一个 ArtistsController、ArtistsRepository 中有我们的艺术家 View ,并遵循 REST 操作名称,例如 Show、New、Delete 等。
当我们第一次模拟网站时,在我们的测试环境中一切正常,因为我们的测试 URL 是/artists/Show/1209
但我们需要改变这一点,使网站显示为/artists/Madonna 和/artists/Foo-Fighters 等
但是,我们如何区分有效的艺术家姓名和该 Controller 的 Action 名称?!例如,艺术家/PostComment 或艺术家/DeleteComment?我需要允许路由来处理这个。我们的默认 Show 路由是:
routes.MapRoute(
"ArtistDefault",
"artists/{artistName}",
new { controller = "Artists", action = "Show", artistName = ""}
解决这个问题的一种方法是让我们的网站明显地在/artists 上运行,但将我们的 Controller 重命名为单数 - ArtistController - 而不是 ArtistsController。这将违反我们开始时采用的命名约定(但是嘿!)。
您还有其他建议吗?如果可能,我们还可以根据动词进行路由(因此 PostComment 将是 POST,因此我们可能可以路由到该操作),但我不确定这是否可取,更不用说可能了。
谢谢
最佳答案
MapRoute 的第四个参数允许您指定值的限制。您可以在此之前添加一条针对“artists/{action}/{id}”的路由,并限制 action 的有效值;未能匹配您的一个操作,它将落入下一条与艺术家姓名匹配的路线。
关于asp.net-mvc - ASP.Net MVC 路由操作名称冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/808236/