自定义路由问题

时间:2014-01-13 16:30:47

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

想知道我是否可以就如何处理我正在处理的Web应用程序的路由获得一些意见。由于它是一个相当复杂的应用程序,有许多区域,默认路由并没有完全削减它。这是设置:

我想要的网址 - /management/assets/course/edit/id

目前,我们有一个管理区域。

我无法理解如何将/management/{controller}/{action}/{id}转换为/management/assets/{controller}/{action}/{id}

如果有更好的做法,请告诉我。我也在研究MVC5中的新属性路由作为解决方案。

1 个答案:

答案 0 :(得分:1)

AttributeRouting应该是解决它的方法:

[RouteArea("management")]
[RoutePrefix("assets/course")]
public class AssetsCourseController : Controller
{
    [Route("edit/{id}")]
    public ActionResult Edit(string id) { ... }
}

当您拥有深层次的路由层次时,这可以让您更好地控制路由并大大简化自定义路由。

要启用它,请在RouteConfig.cs

中进行更改
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    // Setup attributing routing rules
    routes.MapMvcAttributeRoutes();

    // You can comment out the old routing if you don't need it, 
    // but it can work in hybrid mode without issues
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

您可以留在旧路由中并拥有混合路由,并且只有在需要时才会覆盖AttributeRouting,如果您已经有一个工作站点并且需要保持其工作。