C# 自定义路由问题

C# 自定义路由问题,c#,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Routing,想知道我是否能就如何处理我目前正在开发的web应用程序的路由问题获得一些意见。由于这是一个相当复杂的应用程序,有许多领域,默认路由并不能完全满足它。以下是设置: 我想要的URL-/management/assets/course/edit/id 目前,我们有一个管理领域 我无法理解如何将/management/{controller}/{action}/{id}转换为/management/assets/{controller}/{action}/{id} 如果有更好的做法,请让我知道。我还研究

想知道我是否能就如何处理我目前正在开发的web应用程序的路由问题获得一些意见。由于这是一个相当复杂的应用程序,有许多领域,默认路由并不能完全满足它。以下是设置:

我想要的URL-
/management/assets/course/edit/id

目前,我们有一个管理领域

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


如果有更好的做法,请让我知道。我还研究了MVC5中的新属性路由作为解决方案。

属性路由应该是解决这个问题的方法:

[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覆盖。

仅供参考…不需要禁用传统路由…对于大多数情况,我认为传统路由工作正常…您可以选择您希望具有属性路由的控制器/操作。事实上,正如您所评论的,我正在添加该部分。这是特别好的,如果你有一个传统的路由工作网站,需要保持它的工作,而不重做整个路由。谢谢。顺便说一句,我想你的帖子是指向Tim McCall的属性使用nuget软件包。我想你是想使用Web API2的内置属性路由…请编辑你的帖子,以便其他用户也能清楚地看到。从文件夹的角度来看,它是:管理{Controllers{AssetsCourseController,AssetsCourseController},视图{Assets{Course{edit.cshtml},Index.cshtml}试图格式化它,使其有意义。其他答案在这里很好…但只是想检查一下…为什么您不能在您的区域注册中注册
/management/assets/{controller}/{action}/{id}
…您是否看到它不起作用?