asp.net-mvc - ASP.Net MVC 路由操作名称冲突

标签 asp.net-mvc asp.net-mvc-routing

我们有一个处理艺术家和 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/

相关文章:

javascript - ASP Net MVC 从 JS 错误调用 Controller 中的函数

asp.net-mvc - 如何在asp.net C#中从http重定向到https并使其成为网站的默认版本

C# MVC 4 ControllerName 属性

asp.net-mvc - Url.Action 在某些环境中返回空字符串

asp.net-mvc - 在mvc路由中获取值

asp.net-mvc - Html.DisplayFor 和 Html.EditorFor 显示不同的值

javascript - 如何在 ASP.NET MVC 中使用预定义设置创建 .xml 文件?

asp.net-mvc - 在VS2015中使用Gulp编译ASP.NET 4.5.2 MVC项目中的LESS

c# - 从 Controller 中获取 Controller 和 Action 名称?

c# - 一般如何在 MapRoute 方法中实现 URL 重写?