我目前正在尝试生成此网址“/ Cloud / Hosting / RoaringPenguin / Manage / Exclusions”。
这是区域注册
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Hosting_default",
"Cloud/Hosting/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
这是控制器
public class RoaringPenguinController : PortalControllerBase
{
public ActionResult Exclusions()
{
return View("Exclusions");
}
}
我尝试过添加一个路径到动作本身就像这样
[Route("Manage/Exclusions")]
public ActionResult Exclusions()
我也尝试过向控制器本身添加一些属性
[RouteArea("Hosting")]
[RoutePrefix("RoaringPenguin")]
public class RoaringPenguinController : PortalControllerBase
但这似乎也不起作用。如果我保留所有属性,那么我得到的最终网址是“/ Cloud / Hosting / RoaringPenguin / Exclusions”。 有谁知道如何在网址中获得“管理”?
只是为了确认我在RouteConfig类
下的RegisterRoutes方法中有以下设置routes.MapMvcAttributeRoutes();
感谢任何帮助。感谢
答案 0 :(得分:1)
您的默认区域路线不允许"管理/排除"部分结束。如果您将网址设为/Cloud/Hosting/RoaringPenguin/Exclusions
(减去路径的Manage
部分),则可以正常使用。
如果你需要的路线就是那个,那么属性路由是你最好的选择。但是,你提到的那些尝试都缺少某些东西。您的控制器应使用RouteArea
和RoutePrefix
进行修饰,以构成路径的第一部分:
[RouteArea("Hosting", AreaPrefix = "Cloud/Hosting")]
[RoutePrefix("RoaringPenguin")]
public class RoaringPenguinController : Controller
但是,在处理区域时实际实现基本控制器是典型的,这样您就可以在一个地方指定RouteArea
:
[RouteArea("Hosting", AreaPrefix = "Cloud/Hosting")]
public class HostingBaseController : Controller
[RoutePrefix("RoaringPenguin")]
public class RoaringPenguinController : HostingBaseController
然后,你的行动:
[Route("Manage/Exclusions")]
public ActionResult Exclusions()
就像你一样。
答案 1 :(得分:0)
尝试使用此代码
[RouteArea("AreaName", AreaPrefix = "Cloud/Hosting")]
[RoutePrefix("RoaringPenguin")]
public class SampleController : Controller
{
[Route("Manage/Exclusions")]
public ActionResult Exclusions()
{
return View("Exclusions");
}
}
或
[RoutePrefix("Cloud/Hosting/RoaringPenguin")]
public class RoaringPenguinController : PortalControllerBase
{
[Route("Manage/Exclusions")]
public ActionResult Exclusions()
{
return View("Exclusions");
}
}
这将是第一行
routes.MapMvcAttributeRoutes();
之后只需要写这一行
AreaRegistration.RegistrationAllAreas();