c#伪静态,从扩展名的url重定向的,到重写路由使用System.Web.Routing
从webform到mvc,
.html重定向为.aspx 很早之前就有了,使用久了,疑问也渐渐有了,很早前,把一个页面的所有参数都拿去做了url重定向的参数,
后来一旦页面有个别参数变化时,又得把url重定向重新做一个映射
再后来发现,其实没有必要所有参数拿去做重定向,重定向的参数要的应该是不太可能增加减少的,
比如 网站开发,一般分频道,分主要分类,行业分类,等,页面,一般有,首页,列表,详情页,(然后再扩展一些其他页面)
比如有这样的目录文件结构
Index.aspx
channel1/index.aspx
./list.aspx
./detail.aspx
list.aspx 可携带参数有 type1(某种分类),整数,page(第几页),整数,
当需要在list.aspx显示多种分类的合并查询时,list.aspx 可以用 list.html 重写 ,而type1,page,可以作为 list.html的参数:list.html?type1=1&page=1
而以分类进行分开查询,list.aspx,可以用 list_1.html,list_2.html 等重写,表示 type1=1 ,type=2时,page作为参数:list_1.html?page=1
有时,分类有很多,type1,type2,type3,。。。说不定定下来后,后面还会再追加查询过滤参数,url应该写为较少去更改,,其他参数就写成&连接的就可以了,
.net4.0 mvc建站时,用到了System.Web.Routing,还真是不错,说一点体会
mvc从nuget上更新下来的5.2.3,自带的添加了System.Web.Routing,
但其实System.Web.Routing也可以在传统的WebForms上应用,添加引用就好了,
使用System.Web.Routing,你会发现映射变得简单多了,不需要去添加应用程序处理,.html映射为某个dll,不需要去掉文件不存在的勾,不需要编辑web.config,
不需要引用urlrewriter.dll什么的第三方组件,
引用名空间,写好路由规则,在Global.asax,程序启动时,注册你的自定义路由,然后去处理参数就好了,
然而坑的是mvc调用System.Web.Routing时,经常出现255编译错误之类的,它需要,手动结束,所有VBCSCompiler.exe进程,删除bin/roslyn/,再重要编译
有时我还是觉得webforms速度更快,而mvc的框构很好,而若只以webforms文本模板,不使用其服务器控件,也可以搭个webforms版的mvc来玩玩,也不错,
System.Web.Routing路由映射与应用程序处理映射的不同,简单理解应该是目录与文件的区别吧,路由用的是目录,应用程序处理主要是基于文件来做重定向,
所以,路由的重定向会更高级一些,简单的做到,使用应用程序处理映射,需要配置一大堆的功能,
前天配iis7.5的应用程序处理映射,实在无力,比起iis6配起来麻烦很多,最后也没配起来,想想,如果这样的映身发站点发布时又用不了,那不是傻眼了,
说什么也要用System.Web.Routing路由映射了,
webforms的路由映射:
routes.MapPageRoute("DefaultRoute0", "index", "~/index.aspx");
routes.MapPageRoute("DefaultRoute2", "index-{action}", "~/index.aspx",false,null,new RouteValueDictionary() { { "action", "\\w+" } });
访问: http://localhost/index http://localhost/index-channel808
获取:第一个,用什么到参数, 第二个,System.Web.UI.Page.RouteData.Values["action"] 为 channel808
mvc的路由映身,
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "default_user1",
url: "user/{username}/{action}/{id}",
defaults: new { controller = "User", action = "Index", username = UrlParameter.Optional,id=UrlParameter.Optional },
namespaces: new string[] { "My.Web.Controllers" }
);
等等,可以自己去找一些看看,这是要说的是,webforms是映射到page去处理的,而,mvc不是,它是先交给控制器,控制器去返回视图,
而控制器找视图这过程,又有视图引擎的参与,过程发生错误,信息常常不全,不是很好调用,新手想要调试还是很有困难的
,还有,controller="User",这个是对应UserController 这控制器的,Index应当是个ActionResult,ViewResult之类的,这里叫动作吧,
所以我理解的mvc是什么呢,它其实是 c-m-v,首先是控制器,然后模型数据,然后视图,
路由到了控制器的动作,建立数据模型,再到视图页面显示模型的数据,所以模型,它可以为多种视图提供数据,这就是所谓的解藕吧,
在web与wap共同站点时,mvc的映射可以对视图引擎进行控制 搜索不同视图,(在它们使用相同的控制器,与模型时)继承,RazorViewEngine,
重写,ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache),
等等,,
匆匆写来,不成文,仅供参考