Asp.net mvc 我的控制器和区域名称相同,若我想调用默认的控制器方法,该方法在区域内具有和控制器相同的操作名称

Asp.net mvc 我的控制器和区域名称相同,若我想调用默认的控制器方法,该方法在区域内具有和控制器相同的操作名称,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我创建了一个简单的MVC应用程序 我有一个控制器,即直升机控制器 在这个健康控制器中,我有两种方法,即指数和体重 现在我创建了一个领域,即健康 在这个区域,我有一个控制器,即BodyMassController public class HealthController : Controller { public ActionResult Index() { return View(); } // GET

我创建了一个简单的MVC应用程序

我有一个控制器,即直升机控制器

在这个健康控制器中,我有两种方法,即指数体重

现在我创建了一个领域,即健康

在这个区域,我有一个控制器,即BodyMassController

 public class HealthController : Controller
 {
        public ActionResult Index()
        {
            return View();
        }
        // GET: Health
        public ActionResult BodyMass()
        {
            return View();
        }
  } 

此BodyMassController有一个方法索引

我不会更改任何路由文件

下面是我的直升机控制器

 public class HealthController : Controller
 {
        public ActionResult Index()
        {
            return View();
        }
        // GET: Health
        public ActionResult BodyMass()
        {
            return View();
        }
  } 

这是我的BodyMassController,位于健康区域内

  public class BodyMassController : Controller
  {
            // GET: Health/Health
            public ActionResult Index()
            {
                return Content("Hello " + text);
            }
   }
这是我的区域注册码

  public override void RegisterArea(AreaRegistrationContext context) 
  {
            context.MapRoute(
                "Health_default",
                "Health/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
   }
Global.asax

protected void Application_Start()
{
     AreaRegistration.RegisterAllAreas();
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
     RouteConfig.RegisterRoutes(RouteTable.Routes);          
     BundleConfig.RegisterBundles(BundleTable.Bundles);
}
现在,当我使用Url/Health时,它将自动调用HelathController的索引方法

现在,当我使用UrlHealth/BodyMass时,它将在HelathController区域自动调用BodyMassController的索引方法


如果我想调用HelathController的BodyMass(),我需要做什么?

需要将其添加到RouteConfig.cs文件中:

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

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

你这里有冲突,你需要解决它。我建议重命名某些内容。还有其他解决方法吗?您使用的任何方法都会非常有攻击性,请确保安全并重命名。试试这个:但我也建议重命名,尽管您可以使用约束实现目标,谢谢。您有两个相同的URL,这是一个冲突(如前所述)。用户不关心后台发生了什么。如果您有两个页面位于
/health/[which]
上,则需要更改某些内容。例如,您可以重命名您的
区域
、您的
健康
控制器,或者您可以对任何冲突的URL应用自定义路由,以使到达页面所需的URL不同。