技术开发 频道

MVC中默认的地址重写


【IT168技术文档】

  注册地址重写
  MVC的地址重写必须在Global.asax.cs中初始化,从而保证所有的请求都能被 Controller控制。简单的意思就是必须在运行期,应用程序启动的时候被初始化。为什么要到运行期,而不发生在编译器,为什么不能用静态构造函数来完成呢?那是因为编译期连地址都没确定,怎么能够保证地址是正确的呢?

  在Global.asax.cs中默认有两个重写方法被注册
1 protected void Application_Start(object sender, EventArgs e) 2 { 3 // Note: Change Url= to Url="[controller].mvc/[action]/[id]" to enable 4 // automatic support on IIS6 5 6 RouteTable.Routes.Add(new Route 7 { 8 Url = "[controller]/[action]/[id]", 9 Defaults = new { action = "Index", id = (string)null } , 10 RouteHandler = typeof(MvcRouteHandler) 11 }); 12 13 14 RouteTable.Routes.Add(new Route 15 { 16 Url = "Default.aspx", 17 Defaults = new { controller = "Home", action = "Index", id = (string)null }, 18 RouteHandler = typeof(MvcRouteHandler) 19 }); 20 21 22 }
  第一个注册方法是描述了一组规则,而第二组方法描述了根目录下的Default.aspx如何交由controller 来处理。

  controller 处理地址

  比如,我们现在的URL地址是http://www.yurow.cn/,那么,当请求http://www.yurow.cn/的时候,实际上是请求的Default.aspx,这个时候,程序找到规则Defaults = new { controller = "Home", action = "Index", id = (string)null },(这个是默认规则,所有的默认规则都可以通过Defaults = object的方式来调用,当然也有例外,下面会讲到。)。默认规则告诉程序,这个页面请求要交给一个类名为HomeController的控制器来处理(controller = "Home", 就是用控制器的类名减去Controller,这点和Attribute非常相似)。而action = "Index"告诉程序,请求的是控制器中的Index方法,最后的 id = (string)null 则是默认参数。在MVC中,默认参数只有一个,就是id。而这里id值是null。在默认HomeController类中也有两个方法
1 [ControllerAction] 2 public void Index() 3 { 4 RenderView("Index"); 5 } 6 7 [ControllerAction] 8 public void About() 9 { 10 RenderView("About"); 11 }
0
相关文章