日期:2014-05-17  浏览次数:20681 次

关于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}")
有人说你这二条路由