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



.NET MVC。我在定义和使用自定义路线时遇到了一些问题。我有一个只有两个动作的控制器。这些动作方法各接收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中的控制器相同…

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

那么,如何才能做到这一点呢?

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

这里,您要说的是,自定义路由的URL模式应该以MyController(My/(开头。如果url模式与配置的路由(包括默认路由(不匹配,则会出现404错误。

我可以建议两种方法来实现你想要的。。。

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

在Home控制器中创建一个新方法,该方法具有entityTypeId的参数。

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

看看这个。

路由:当前操作请求〔…〕在以下操作方法之间不明确

最新更新