关于MVC重写URL的初级有关问题。请赐教,感谢

关于MVC重写URL的初级问题。请赐教,感谢
刚自学MVC,想重写下URL.网上都点教程都没看明白,没写的太入门。现在手里也没书,只能问大家了 

分不多了,20全给你。感谢

很简单  

http://localhost:3853/home/index

这个地址我想写成http://localhost:3853/qqq.htm

再下一步最好能写成http://localhost:3853/qqq_a1b2c3.htm

其实a b c 是我action方法要接收的参数,如果写成这样  是不是还要把action接一个字符串参数,我自己去拆分啊?

---------------------------------------------
还一个额外的问题 

      routes.MapRoute(
                "Default", // 路由名称
                "{controller}/{action}/{id}", // 带有参数的 URL
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
            );

默认的路由配置,我认为所有符合url条件的都应该去Index,问什么他们还能找到自己的同名的view


感谢 感谢
MVC URL

------解决方案--------------------
MVC的那个url是配置的

配置Routing的规则 是在Global.asax里设置的

如果我们把MVC必当成一个乐队的话 那么Route就是这个乐队的指挥可见Route在MVC中的重要性 以下是对Route的一些理解


 protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterRoutes(RouteTable.Routes);
    //这个Routes是在什么时候确定的呢 他是在Application_Start的时候确定的
   AppLication_Start这个方法是在应用程序开始的时候执行的
        }



Routing与URL Rewrite的区别

URL Reewrite 改变程序处理的URL
URL Route 根据URL的规则选择执行
两者执行机制不同
在某些情况下可以产生同样的结果
URL Route更像是一中基础支持
——适合在于开发基于ASP.NET构架的新构架



URL的匹配规则  以下的url都是绝对路径
定义:site/{controller}/{action}/{id}
这个匹配的url必须是四段 第一个必须是site 后面一个必须是数字(id) 中间二个可以随便输入 如 site/a/b/1 
可以匹配:site/Products/display/123
不能匹配:/products/display/123 因为这个前面的url没有加site

定义:{language-{contry}/{controller}/{action}
可以匹配:/chinese-china/products/dispay
定义:{controller}.{action}.{id}
可以匹配:/products.display.123

{controller}{action}/{id}无法匹配 这种匹配的方式根本无法匹配 ,因为缺少分割符,这样路由无法匹配运行

默认路由:
添加匹配路由参数
Route.MapRoute("simple",{controller}/{action}/{id},new {id=""});
Route.MapRoute("simple","{controller}/{action}/{id}",new{id="",action="index"})
指定id为空  Controller为Index页面

关于URL的约束 
输入的URl是(http://localhost/2012/7/19) (http://localhost/producst/list/food)可以用正则表达式进行约束

routes.MaoRoute("bolg","{year}/{month}/{day}",
new {controller="blog",action="index"}
new {year=@"\d{4}",month=@"\d{2}",day=@"{\d{2}}"}
);
routes.MapRoute("simple","{controller}/{action}/{id}")
有人说你这二条路由顺序有没有讲究,就是说谁在上,谁在下,问这问题的很非常聪明,肯定是动脑子想过这件事,答案是有讲究的,假如我把simple这条写在上面,那么很不幸,上面的那个永远也匹配不上,为什么呢,因为路由的顺序是按照他添加的顺序来匹配的,当遇到路由相同的时候,先注册的路由会先匹配到,先匹配到的时候,我就会用正则表达式来效验他头四位是不是数字,中间二位是不是数字,最后二位是不是数字,如果是那么这条路由就会匹配上,如果不是下一条路由才会调用。所以说正则表达式对于Routes的操作是非常有用的。