Per*_*ian 4 asp.net-mvc asp.net-mvc-routing
我们有一个处理艺术家和场地的网站,我们正在ASP.net MVC中开发它.
我们将艺术家视图放在文件夹(Views/Artists/..),ArtistsController,ArtistsRepository中,并遵守REST动作名称,如Show,New,Delete等.
当我们第一次模拟网站时,一切都在我们的测试环境中运行良好,因为我们的测试网址是/ artists/Show/1209但我们需要更改此网站,以便网站显示为/ artists/Madonna和/ artists/Foo-Fighters等
但是,我们如何区分有效的艺术家名称和该控制器的动作名称?!例如,艺术家/ PostComment或艺术家/ DeleteComment?我需要允许路由来处理这个问题.我们的默认Show路线是:
routes.MapRoute(
"ArtistDefault",
"artists/{artistName}",
new { controller = "Artists", action = "Show", artistName = ""}
Run Code Online (Sandbox Code Playgroud)
解决这个问题的一种方法是让我们的网站明显地运行/艺术家,但我们的控制器重命名为singular - ArtistController - 而不是ArtistsController.这会违背我们开始时的命名约定(但是嘿!).
你有其他建议吗?如果可能的话,我们也可以根据动词进行路由(因此PostComment将是一个POST,所以我们可以路由到该动作),但我不确定这是否可取,更不用说可能了.
谢谢
MapRoute的第4个参数允许您指定值的限制.您可以在此之前添加一个路线,用于"artists/{action}/{id}",并限制有效的操作值; 如果没有匹配您的某个操作,它将会转到下一个匹配艺术家姓名的路线.
您实际上将定义多个路由...控制器中定义的操作将首先出现,默认位于底部.我喜欢把路由定义看作是一个"大'ole switch语句",其中第一个规则满足胜利.
routes.MapRoute(
"ArtistPostComment",
"artists/PostComment/{id}",
new { controller = "Artists", action = "PostComment", id = "" }
);
routes.MapRoute(
"ArtistDeleteComment",
"artists/DeleteComment/{id}",
new { controller = "Artists", action = "DeleteComment", id = "" }
);
routes.MapRoute(
"ArtistDefault",
"artists/{artistName}",
new { controller = "Artists", action = "Show", artistName = "" }
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |