路由中未指定控制器

No controller specified in route

情况:

我有一个 ASP.NET 应用程序,其中有不同的控制器。我在 RouteConfig 中将路由更改为:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
    "SpecificRoute", 
    "{action}/{id}", 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional });

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Error", action = "NotFound", id = UrlParameter.Optional }

我的 HomeController 中的所有页面都工作正常。我找到他们的一种方式是使用 ActionLink:

@Html.ActionLink("Index Page", "Index", "Home")

而且效果很好,即使上下文的其他方式也是如此:“example”,"Home".

当我 select 另一个控制器时出错,比方说:

@Html.ActionLink("GoToErrorPage", "NotFound", "Error") // error page

这个link的结果是,它只是连接到主页。它没有转到正确的页面。


我想使用 URL 连接到所有页面(在其他控制器中也是如此),例如:

http://localhost:12345/Request

原始 url 的样子(在 RouteConfig 中更改之前)

http://localhost:12345/Home/Request


问题:

  1. 我需要如何配置RouteConfig

  2. 如何设置之前不需要输入控制器 url?

  3. 中的动作
  4. 如何正确设置 ActionLink?

您的两条路线实际上是相同的,因为它们都匹配具有 2 个路段的任何 url。如果您希望能够在不指定控制器名称的情况下导航到一个方法,那么您将需要为每个方法创建特定的路由。例如,如果您想使用 ../Request../Request/1 导航到 HomeControllerRequest(int? id) 方法,那么您需要

routes.MapRoute(
    "Request", 
    "Request/{id}", 
    new { controller = "Home", action = "Request", id = UrlParameter.Optional }
);

并且该路由必须放在默认路由之前

然后在视图中 @Html.ActionLink("Request Page", "Request", "Home") 将生成 ../Request 的 url 并转到 HomeController

Request() 方法