如何拆分我的控制器名称以进行网址路由?

时间:2013-03-25 07:58:35

标签: asp.net-mvc url-routing

我想分割我的控制器名称..

例如;

我的控制器名称是For_ExpController.cs

我想要这样的网址;

http://localhost/For/Exp/Action

如何在我的RouteConfig.cs上定义它?

1 个答案:

答案 0 :(得分:2)

您可以编写自定义路线:

public class MyRoute: Route
{
    public MyRoute()
        : base(
            "{part1}_{part2}/{action}",
            new RouteValueDictionary(new { controller = "for_exp", action = "index" }),
            new RouteValueDictionary(new { part1 = @"[a-z]+", part2 = @"[a-z]+" }),
            new MvcRouteHandler()
        )
    {
    }

    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        var rd = base.GetRouteData(httpContext);
        if (rd == null)
        {
            return null;
        }

        var part1 = rd.GetRequiredString("part1");
        var part2 = rd.GetRequiredString("part2");
        rd.Values["controller"] = string.Concat(part1, "_", part2);
        return rd;
    }
}

将在您的Application_Start注册:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.Add("MyRoute", new MyRoute());

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}",
        defaults: new { controller = "Home", action = "Index" }
    );
}