C# 具有多个参数且参数名称不同的MVC路由

C# 具有多个参数且参数名称不同的MVC路由,c#,asp.net-mvc,asp.net-mvc-4,routing,C#,Asp.net Mvc,Asp.net Mvc 4,Routing,在我的家庭控制器中,我有3种动作方法。 这是下面给出的 public ActionResult Index(int id) { return View(); } public ActionResult Index2(int did,int docType) { return View(); } public ActionResul

在我的家庭控制器中,我有3种动作方法。 这是下面给出的

        public ActionResult Index(int id)
        {
            return View();
        }


        public ActionResult Index2(int did,int docType)
        {
            return View();
        }


        public ActionResult Index3(int uid,int docId,int typeId)
        {
            return View();
        }
由于我在每个操作方法中都给出了不同的参数名称,因此我必须在
Route.config
中进行更改

我已经这样做了

方法1

routes.MapRoute(
                name: "Home",
                url: "{controller}/{action}/{did}/{docType}",
                defaults: new { controller = "Home", action = "Index2", did = UrlParameter.Optional, docType = UrlParameter.Optional }
            );
            routes.MapRoute(
                name: "Home",
                url: "{controller}/{action}/{uid}/{docId}/{typeId}",
                defaults: new { controller = "Home", action = "Index3", uid = UrlParameter.Optional, docId = UrlParameter.Optional, typeId = UrlParameter.Optional }
            );
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
但这给了我一个例外

Home' is already in the route collection. Route names must be unique
所以我必须把它改成这样

方法2

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}/{did}/{docType}/{uid}/{docId}/{typeId}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, did = UrlParameter.Optional, docType = UrlParameter.Optional, uid = UrlParameter.Optional, docId = UrlParameter.Optional, typeId = UrlParameter.Optional }
        );
当我点击Url时

这给我带来了一个例外

这是解决方案。

正如Stephen Muecke所建议的

 routes.MapRoute(
                name: "Admin",
                url: "{controller}/{action}/{did}/{docType}",
                defaults: new { controller = "Home", action = "Index2", did = UrlParameter.Optional, docType = UrlParameter.Optional }
            );
            routes.MapRoute(
                name: "User",
                url: "{controller}/{action}/{uid}/{docId}/{typeId}",
                defaults: new { controller = "Home", action = "Index3", uid = UrlParameter.Optional, docId = UrlParameter.Optional, typeId = UrlParameter.Optional }
            );
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

路由名称应该是唯一的,您有两个同名的路由:“Home”

,因为我为所有路由指定了相同的名称。路由名称必须是唯一的,现在我用不同的名称重命名了路由

routes.MapRoute(
                name: "Admin",
                url: "{controller}/{action}/{did}/{docType}",
                defaults: new { controller = "Home", action = "Index2", did = UrlParameter.Optional, docType = UrlParameter.Optional }
            );
            routes.MapRoute(
                name: "User",
                url: "{controller}/{action}/{uid}/{docId}/{typeId}",
                defaults: new { controller = "Home", action = "Index3", uid = UrlParameter.Optional, docId = UrlParameter.Optional, typeId = UrlParameter.Optional }
            );
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

第一个错误的原因是,前两个路由定义的名称为“Home”,它们必须是唯一的。只要换一个或多个other@StephenMuecke当前位置但我的所有操作都在主控制器中。这与此无关。然后打你想要的任何电话。他们只需要unique@StephenMuecke:谢谢。它起作用了。方法2是否可行?我对此表示怀疑。只有最后一个参数是可选的,因此每次至少需要提供5个参数以避免歧义。另请注意,
name
属性由
@Html.RouteLink(“XYZ”)等方法使用匹配
routes.MapRoute(名称:“XYZ,…)