2

要在 ASP.NET MVC4 中定义你自己的 URL 路由,我相信你修改 Global.asax.cs 让它看起来像......

using System.Web.Mvc; 
using System.Web.Routing; 
namespace MvcApplication1 { 
    public class MvcApplication : System.Web.HttpApplication { 
        public static void RegisterRoutes(RouteCollection routes) { 
            routes.MapRoute( .....

但是我在任何地方都找不到,是您如何添加多条路线 - 例如,您只是routes.MapRoute(....)再次打电话吗?

另外,这会覆盖隐藏的默认路由定义吗?如果我想保留它,我还需要定义它吗?

4

3 回答 3

3

我只想添加到 Embram 的答案中,最佳做法是添加从最详细到一般的路线:

routes.MapRoute(
                name: "Route1",
                url: "Mail/{id}",
                defaults: new { controller = "Home", action = "Mail", id = UrlParameter.Optional }
            );

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

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
于 2013-08-11T16:42:09.307 回答
2

要添加多条路线,请检查此添加_routes_to_an_mvc_application。正如你所说,routes.MapRoute(....)再次拨打电话。

考虑到 MVC Routing 关于排序路由的一件事。您的最后一条路线必须尽可能通用,并且您之前的路线必须尽可能具体。(查看ASP.NET MVC 默认路线

这会覆盖隐藏的默认路由定义吗?

我不这么认为,但你的路线肯定会在默认 MVC 路由之前先被检查。(检查这个SO 帖子

于 2013-08-11T16:04:09.023 回答
1

您似乎对在 MVC 4 应用程序中定义路由的位置感到困惑。

global.asax应该看起来像(默认情况下):

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();
    }
}

WhereRouteConfig的定义/App_Start/RouteConfig.cs如下(默认情况下):

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

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

知道了这一点,您应该能够根据需要编辑路线。

于 2013-08-11T17:45:20.387 回答