.NET MVC 自定义路由不同的默认控制器

.NET MVC custom route different default controller

.NET MVC。我在定义和使用自定义路由时遇到了一些问题。 我有一个只有 2 个动作的控制器。这些动作方法各接收 2 个参数。我在 RouteConfig.cs 中添加了一个自定义路由(在默认路由之前),像这样

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

如果 MyController 确实包含 Index 方法(和相应的视图),则此方法有效。 问题是,MyController 不包含 Index 方法(仅包含之前提到的 2 个操作方法),我希望 route.default 类似于 Home/Index 而不是 .但如果我将路线更改为:

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

它不起作用。显然,route.url 中的控制器必须与 route.defaults 中的控制器相同...

CORRECTION:路由适用于正确的 url,但对于错误的路由(例如在末尾添加另一个参数),它显示 404 错误(使意义,因为 MyController.Index 不存在)

那么,如何实现呢?

url: "MyController/{action}/{entityType}/{id}"

在这里,你所说的是你的自定义路由的 URL 模式应该以 MyController(My/) 开头。 如果 url 模式与配置的路由(包括默认路由)不匹配,您将遇到 404 错误。

我可以建议 2 种方法来实现您想要的...

在您的 MyController 中创建第三个方法作为默认方法,其任务是重定向到 Home/Index。

在具有 entityTypeId.

参数的家庭控制器中创建一个新方法

您不能为 Home/Index 创建重载,因为控制器上最多只能有 2 个同名的操作方法。

看到这个。

Routing: The current request for action [...] is ambiguous between the following action methods