Asp.net mvc 4 使用附加url参数创建路由,而不创建区域

Asp.net mvc 4 使用附加url参数创建路由,而不创建区域,asp.net-mvc-4,asp.net-mvc-routing,Asp.net Mvc 4,Asp.net Mvc Routing,我正在使用.NETMVC4为客户机构建一个站点。整个站点使用默认的MVC4路由,所有页面都可以正常工作 routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Pa

我正在使用.NETMVC4为客户机构建一个站点。整个站点使用默认的MVC4路由,所有页面都可以正常工作

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        )
网站上有一个名为“教师”的页面。对于此页面,有几个链接可将您带到属于“教师”页面子集的新页面。客户端希望url结构如下所示

www.{mysite}.com/School/Teachers/Apply

www.{mysite}.com/School/Teachers/Benefits

我想我可以简单地将Apply和Benefits页面添加为我的SchoolController中的ActionResult,然后使用MVC中的路由功能将url映射到SchoolController中正确的ActionResult方法

这是我的控制器:

public class SchoolController : Controller
{

    public ActionResult Index()
    {

        return View();
    }

    public ActionResult Administration()
    {
        return View();
    }

    public ActionResult Teachers()
    {
        return View();
    }

    public ActionResult Apply()
    {
        return View();
    }

    public ActionResult Benefits()
    {
        return View();
    }
}
这是我尝试的自定义路线

routes.MapRoute(
       "Teachers",
       "{controller}/{page}/{action}",
       new { controller = "School", page = "Teachers", action = "Index" }
           )
我将此路径置于默认路径之前,但这会将“教师”添加到网站上的每个url,如下所示:

www.{mysite}.com/{controller}/teachers/{action}

摘要

我网站上的所有页面都使用此url结构:

www.{mysite}.com/{controller}/{action}

但是,这一页的结构如下:

www.{mysite}.com/{controller}/teachers/{action}

我如何使用路线来实现这一点

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

    routes.MapRoute(
        name: "TeachersActions",
        url: "School/Teachers/{action}",
        defaults: new { controller = "School" },
        constraints: new { action = "Apply|Benefits" } // actions under Teachers
    );

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index",
                        id = UrlParameter.Optional }
    );
}
您希望在教师指导下执行的任何操作都应添加到路线中。实际上,没有必要为此路由的操作或页面指定默认值(除非您确实需要捕获页面路由值)。这里的问题是,用户仍然可以通过输入URL
School/{action}
以教师下的操作为目标,因为它是通过默认路径捕获的。这可能是你的问题,也可能不是。就个人而言,我不认为这是一个大问题,因为用户应该只使用站点的导航而不是手动输入URL。
您希望在教师指导下执行的任何操作都应添加到路线中。实际上,没有必要为此路由的操作或页面指定默认值(除非您确实需要捕获页面路由值)。这里的问题是,用户仍然可以通过输入URL
School/{action}
以教师下的操作为目标,因为它是通过默认路径捕获的。这可能是你的问题,也可能不是。就个人而言,我不认为这是一个大问题,因为用户应该只使用站点的导航,而不是手动输入URL。

路由顺序很重要,只有在默认路由之前,这个路由才会起作用。这条路线非常具体,他们确实说他们把路线放在了默认路线之前。@ProxiticFault我尝试了你的新答案。所有其他控制器工作正常。现在唯一的问题是,my Teachers controller中其他ActionResults的url如下所示:www.mysite.com/school/Teachers/Teachers/It仍在添加教师,而school controller中的所有其他ActionResults几乎都是正确的,我没有想到这会如何影响UrlHelper生成URL,也没有想到@Html.ActionLink和其他生成URL的HtmlHelper操作。您当然可以根据自己的评论更新答案。路由顺序很重要,只有在默认路由之前,此路由才能工作。@ErikPhilips这是正确的,此路由非常具体,他们确实声明已将路由放置在默认路由之前。@渐近故障我尝试了您的新答案。所有其他控制器工作正常。现在唯一的问题是,my Teachers controller中其他ActionResults的url如下所示:www.mysite.com/school/Teachers/Teachers/It仍在添加教师,而school controller中的所有其他ActionResults几乎都是正确的,我没有想到这会如何影响UrlHelper生成URL,也没有想到@Html.ActionLink和其他生成URL的HtmlHelper操作。你完全可以根据你的评论更新答案。