投稿 评论 顶部

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),

等等,,

?

匆匆写来,不成文,仅供参考