首页 > 解决方案 > 默认路由到索引以外的其他操作

问题描述

我已经搜索了很长时间,但是对于这种情况,我没有找到答案。

我的route.config中有一个HomeController默认路由,如下所示:

routes.MapRoute(
    name: "Default",  
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

所以; http://localhost:36690/Home自动调用Index

我也有一个方法MyController(它是route.config中的自定义路由),Index并且可以编写http://localhost:36690/My并且可以工作。

但我想有一条没有任何Index.

如果我要求localhost:36690/New,它应该调用BASIC

所以我尝试了以下方法:

routes.MapRoute(
    "New",
    "{controller}/{action}",
    new { controller = "New", action = "Basic" }
);

但它忽略了我的默认操作“基本”并引发错误:

“/”应用程序中的服务器错误。无法找到该资源。"

标签: c#asp.net-mvcasp.net-mvc-5asp.net-mvc-routing

解决方案


您可以专门为该控制器添加另一条路由。

routes.MapRoute(
    name: "New",
    url: "New/{action}",
    defaults: new { controller = "New", action = "Basic" }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

这样,当/New被调用时,它将默认为NewController.Basic


推荐阅读