Asp.net mvc 我的控制器和区域名称相同,若我想调用默认的控制器方法,该方法在区域内具有和控制器相同的操作名称
我创建了一个简单的MVC应用程序 我有一个控制器,即直升机控制器 在这个健康控制器中,我有两种方法,即指数和体重 现在我创建了一个领域,即健康 在这个区域,我有一个控制器,即BodyMassControllerAsp.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
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不同。