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