asp.net-mvc - 如何在 URL 中没有 Controller 名称的情况下获取单个 Controller 中操作方法的不同 URL?

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

我正在开发一个简单的 MVC 网站。在我的项目中,只有一个 Controller ( Home )和 2 个操作方法( IndexInner 页)。 Home操作返回主页的 View 和 Inner pages 操作返回内页的内容(内页使用单一模板,因此对所有内页使用单一 View )。

现在我想要的是,如果我运行该项目,我会得到如下菜单:

http://localhost:3000/Home/
http://localhost:3000/Home/Info/AboutUs
http://localhost:3000/Home/Info/Contact

但不是上面的路径,我需要这样的路径:
http://localhost:3000/Home/
http://localhost:3000/AboutUs
http://localhost:3000/Contact

无需添加新的 Controller ,url 需要调用其对应的操作方法。

我的路由文件是
routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

你能帮我实现这个目标吗?

最佳答案

您需要将自定义路由添加到路由表中。但请确保您还保留默认路由。例如,我在下面创建了一个名为“HomeRoute”的自定义路由,同时保留了默认路由...

routes.MapRoute(
            name: "HomeRoute",
            url: "{action}",
            defaults: new { controller = "Home", action = "Index" }
        );

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

但是,请注意您需要在 home Controller 中定义操作方法,因为默认 Controller 设置为“Home”,如果它们在不同的 Controller 中定义,则更改默认 Controller

换句话说,如果您的 Home Controller 定义如下...
public class HomeController : Controller
{
    public ActionResult Index(){...}
    public ActionResult About(){...}
}

然后您可以导航到 About使用以下路线进行操作...

网站名称/关于

关于asp.net-mvc - 如何在 URL 中没有 Controller 名称的情况下获取单个 Controller 中操作方法的不同 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24006882/

相关文章:

c# - 自定义路由上未调用 GetVirtualPath

asp.net-mvc - MVC 路由异常

c# - 使用asp.net路由url

c# - 存储库不初始化实体数据

asp.net-mvc - 如何在两个区域使用一个默认成员(member)提供商?

asp.net-mvc - 允许使用ASP-MVC和Forms Authentication访问特定页面

asp.net - 从 Web API 获取空的 500 http 状态代码

c# - 属性路由在 MVC4 中不起作用

asp.net-mvc - 用于搜索的ASP.NET MVC自定义路由

javascript - 替换 h2 元素中的特定单词