Asp.Net MVC 5区域下的自定义动作路由

时间:2016-10-12 13:19:56

标签: asp.net asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing

我目前正在尝试生成此网址“/ 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();

感谢任何帮助。感谢

2 个答案:

答案 0 :(得分:1)

您的默认区域路线不允许"管理/排除"部分结束。如果您将网址设为/Cloud/Hosting/RoaringPenguin/Exclusions(减去路径的Manage部分),则可以正常使用。

如果你需要的路线就是那个,那么属性路由是你最好的选择。但是,你提到的那些尝试都缺少某些东西。您的控制器应使用RouteAreaRoutePrefix进行修饰,以构成路径的第一部分:

[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();