MVC路由如何理解URL?

时间:2011-02-22 15:54:52

标签: asp.net-mvc url url-rewriting asp.net-mvc-routing

Global.asax.cs在初始化时有以下代码:

 routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

我要问的是,它是如何知道它为“{controller}”获取的内容将是要调用的Controller类的名称?是否在某处定义了令牌?如果是的话,我可以列出它们吗?

如果我定义了额外的令牌(比如“{lang}”),它会认为它们是附加参数吗?

(我正在开发一个自定义URL重写/重定向处理程序,我需要它来使用MVC ...)

为URL定义自定义模式和“别名”的最实用方法是什么?

2 个答案:

答案 0 :(得分:1)

Mvc运行时具有硬编码的控制器和动作令牌。此外还有“区域”,但就此而言。

答案 1 :(得分:1)

@TDaver如果我定义了额外的令牌(比如“{lang}”),它会认为它们是附加参数吗?

是肯定的。例如,如果您定义一个像lang这样的参数,它就会检测到它。想想那样,它将是名为lang of the page的查询字段。你可以为pretyy url创建一个路由。如下所示;

 routes.MapRoute(
                "Default", // Route name
                "{lang}/{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

所以网址会像; http://example.com/en/home/about

此外,路由最重要的部分是了解路由将按订单挑选。例如,如果您有多个匹配当前请求的路由,则MVC Framework将选择第一个路由。

我建议你看一下phil haccked's RouteDebugger

您也可以为高级路由选项创建路由约束。