当前位置: 首页 > news >正文

做网站播放未上映的电影淘宝官网网页版淘宝网

做网站播放未上映的电影,淘宝官网网页版淘宝网,建站哪个好一点,响应式网站图解9.1 理解URL URL满足的要求#xff1a; l 域名易于记忆和拼写 l 简短、易输入 l 可以反应出站点的结构 l 可破解#xff0c;用户可以通过移除URL的末尾#xff0c;进而达到更高层次的信息体系结构 l 持久、不能变化 9.2路由机制的概述 ASP.NET MVC中路由机制的两种用途…9.1 理解URL URL满足的要求 l 域名易于记忆和拼写 l 简短、易输入 l 可以反应出站点的结构 l 可破解用户可以通过移除URL的末尾进而达到更高层次的信息体系结构 l 持久、不能变化 9.2路由机制的概述 ASP.NET MVC中路由机制的两种用途 l 匹配传入的请求并映射到控制器的操作 l 构造传出的URL用来相应控制器的操作 9.2.1 对比路由和URL重写 URL重写是将URL映射到另一个URL 路由是将URL映射到资源 两者的区别路由机制也使用它在匹配传入URL时同样的映射规则来帮助生成URL而URL重写只能用于传入的请求URL而不能帮助生成原始的URL 9.2.2 路由的定义 路由的定义是从URL模式开始的因为它指定了与路由相匹配的模式路由可以指定它的URL及其默认值还可以约束URL的各个部分提供关于路由如何、何时、传入的请求URL相匹配的严格控制 路由URL 我们在新建的应用程序中的Global.asax.cs文件的Application_Start方法中调用了一个RegisterRoutes方法如下  public static void RegisterRoutes(RouteCollection routes)         {             routes.IgnoreRoute({resource}.axd/{*pathInfo});               routes.MapRoute(                 Default, // 路由名称                 {controller}/{action}/{id}, // 带有参数的 URL                 new                 {                     controller  Home,                     action  Index,                     id  UrlParameter.Optional                 } // 参数默认值             );         } 如routes.MapRoute(Default,{first}/{second}/{third}); 在两个斜杠之前的花括号为占位符这些占位符即是URL参数该示例定义的规则可以匹配任何带有3个段的URL我们可以将这些参数命名为任何想要的名称当客户端请求到达服务器时路由将解析请求的URL并将解析出的路由参数值放入字典中 2、路由值 我们可以使用任何想要的名称定义路由但是为了程序的正确的运行ASP.NET MVC 框架要求使用一些特定的参数名--{controller}和{action} {controller}为处理请求的控制器ASP.NET MVC 规定将Controller后添加到{Controller}URL参数值的后面构成一个类型名称然后根据名称查找实现了System.Web.Mvc.IController接口的类型 如下示例routes.MapRoute{Default,{controller}/{action}/{id}); 路由URL在段中也允许包含字面值如将MVC集成到一个现有的站点中并想要所有的MVC请求一site开头 则如下site/{controller}/{action}/{id} 所以该路由只能匹配site/Home/index/123 而不是匹配/Home/index/231 此外URL段中还允许字面值和参数混在一起但是它不允许有两个连续的URL参数 如下{language}-{country}/{controller}/{action}       {controller}.{action}.{id} 有时只需要匹配两个参数这个时候我们不需要在重写路由了只需要将第三个参数换为可选参数就行 如下routes.MapRoute(Default,{controller}/{action}/{id}new {idUrlparameter.Optional}); 我们也可以为多个参数提供默认值 如routes.MapRoute(Default,{controller}/{action}/{id}new {idUrlparameter.Optionalaction“index}); 路由URL模式、默认值及其匹配 路由URL模式                       默认值                   匹配URL模式示例 {controller}/{action}/{id}  new {idUrlParameter.Optional} /albums/diplay/123                                                             /albums/diplay {controller}/{action}/{id}  new {idUrlParameter.Optional, /albums/display/123                                  Actionindex,           /albums/display                                  IdUrlParameter.Optional} /albums                                                            /                                   4、路由约束 有时候需要对指定URL段的数量来说我们需要对URL有更多的控制 如下URL: l http://example.com/2008/01/16 l http://example.com/posts/categories/aspnetmvc/ 以上的两个URL都包含3个段且都可以和默认路由匹配但是如第一个URL要匹配一个2008controller的控制器这样是错误的因此需要对路由进行约束 如  routes.MapRoute(blog, {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路由之前添加的新路由路由按先后顺序与传入的URL进行匹配直到匹配成功因为/2008/01/16的请求将与两个定义的路由都匹配所以我们把更具体的路由放在了前面 9.2.3 命名路由 为路由指定名称可以解决URL的路由二义性问题 如 routes.MapRoute(name: Test, url: code/p/{action}/{id}, defaults: new             {                 controller  Section,                 action  Index,                 id               });             routes.MapRoute(name: Default, url: {controller}/{action}/{id}, defaults: new             {                 controller  Home,                 action  Index,                 id               }); 在视图中生成指向路由的超链接如下     Html.RouteLink(Test, new {     controller  section,     action  Index,     id  123 });     Html.RouteLink(Default, new {     controller  Home,     action  Index,     id  123 }); 该方法不能指定由哪个路由来生成链接 为此我们做如下修改  Html.RouteLink(linkText: Route:Test, routeName: Test, new {     controller  section,     action  Index,     id  123 });     Html.RouteLink(linkText: Route:Default, routeName: Default, new {     controller  Home,     action  Index,     id  123 }); 这样我们便可以为生成的URL指定路由名来生成相应的URL 9.2.4 MVC区域 在路由没有指定名称空间的情况下很容易产生二义性即两个同名的控制器同时匹配一个路由我们可以通过在项目中使用唯一的控制器名称来防止二义性如下对特定的路由指定一组用来定位控制器的名称空间             routes.MapRoute{Default,{controller}/{action}/{id},new {controllerHome,actionIndex,id},new []{ AreasWeb.Controllers}); 第四个参数指定一个名称空间数组 9.2.5 Catch-All 参数 Catch-all参数允许路由匹配具有任意数量的段的URL参数中的值是不含查询字符串的URL剩余部分 如         routes.MapRoute(CatchAllRoute, /query/{query-name}/{*extrastuff}); 匹配如下 URL                           参数值 /query/select/a/b/c         extrastuffa/b/c /query/select/a/b/c/        extrastuffa/b/c /query/select/              extrastuff(路由仍然匹配“catch-all捕获了空字符串 9.2.6 段中的多个URL参数 路由的URL中可以存在多个参数如下 l {title}-{artist} l Album{title}and{artist} l {filename}.{ext} 为避免二义性参数不能临近 如下均为无效的URL l {title}{atrist} l DownLoad{filename}{ext} 路由URL在与传入的请求匹配时它的字面值与请求精确匹配而其中的URL参数是贪婪匹配路由使每个URL参数尽可能的匹配更多的文本 如下                      多参数路由匹配 路由URL             请求的URL                   路由数据的结果 {finename}.{ext}    /Foo.xml.aspx               filenameFoo.xml extaspx My{title}-{cat}     /MyHouser-dwelling          titleHouser extdwelling {foo}xyz{bar}       /xyzxyzxyzblah              fooxyzxyz barblah 9.2.7 StopRoutingHandler和IgnoreRoute 默认情况下路由机制将忽略那些映射到磁盘物理文件的请求。 方法如下         public static void RegisterRoutes(RouteCollection routes)         {             routes.IgnoreRoute({resource}.axd/{*pathInfo});//第一种方法             routes.Add(new Route({resource}.axd/{pathInfo},new StopRoutingHandler()));//第二种方法 } 9.2.9 揭秘路由如何生成URL 1、URL生成的高层次概述 路 由机制的核心是一个基于RouteCollection类和RouteBase类组成的简单抽象对象组成的算法。有许多中生成URL的方法但是这些方法 都是以调用RouteCollection.GetVirtualPath方法的重载版本而结束的该方法的重载版本如下 Public virtualPathData GetVirtualPath(RequestContext requestContext,RouteValueDictionary values) Public virtualpathData GetVirtualPath(RequestContext requestContext,string name,RouteValueDictionary values) 第一个重载版本接受当前的RequestContext以及由用户指定用来选择想要的路由值 l 路由集合通过Route.GetVirtualPath方法遍历每个路由类似于在路由与传入的请求匹配时所运用的匹配逻辑 l 如果一个路由匹配则返回一个包含了URL的VirtualPathData实例及其他匹配信息否则将返回空值路由机制移向列表中的下一个路由 第二个重载版本接受了三个参数第二个参数为路由名称在路由集合中路由名称是唯一的指定了路由名称之后便不需要遍历每个路由直接找到指定名称的路由进行匹配如果匹配则返回VirtualPathData实例否则返回空值 2、URL生成详解 ① 用户调用RouteCollection.GetVirtualPath方法并向它传递一个RequestContext对象、一个包含值的字典以及用来选择生成URL路由的名称可选参数 ② 路由机制查看要求的路由URL参数并确保提供的路由值字典为每一个要求的参数提供一个值否则URL生成程序立即中止返回空值 ③ 一 些路由可能包含没有对应的URL参数的默认值。如路由可能为category见提供了 一个默认值pastries,但是category不是路由 URL的一个参数这时如果用户传入的路由值字典为category提供了一个值那么该值必须匹配category的默认值 ④ 路由机制然后应用路由的约束如果有的话要查找约束 ⑤ 路由匹配成功可以通过查看每一个URL参数并尝试用字典中的对应值填充它进而生成URL 3、外界路由值 在一些情形中URL生成程序还可以利用那些不是通过调用GetVirtualPath方法显示提供的值 4、溢出参数 指在URL生成过程中使用、但是在路由定义中却没有指定的路由值。具体指的是路由的URL、默认的字典和约束字典 如路由定义如下             routes.MapRoute(                 Default, // 路由名称                 {controller}/{action}/{id}, // 带有参数的 URL                 new                 {                     controller  Home,                     action  Index,                     id  UrlParameter.Optional                 } // 参数默认值             ); 上面路由的定义中不包括名为“page”的URL参数下面我们使用Url.RouteUrl方法渲染了URL而不是生成连接 Url.RouteUrl(new {controllerReport,actionList,page123}); 5、该 行代码生成的URL是/Request/List?Page2,但是我们指定的参数比需要的参数还要多这个时候额外的参数会作为查询字符串附加在生 成的URL之后路由机制在选择匹配的路由时并不是精确的匹配它只是选择足够的匹配的路由只要指定的参数满足路由需要额外参数无关紧要 6、Route类生成URL的若干示例 routes.MapRoute(report, reports/{year}/{month}/{day}, new{day  1}); 则GetVirtualPath方法调用示例如下 参数                        返回URL                          说明 Year2007month1day1   /reports/2007/1/1               直接匹配 Year2007month1          /reports/2007/1                 默认day1 Year2007month1        /reports/2007/1/1Category123 溢出参数进入生成的URL                                                  day1category123  Year2007                   返回空值                 因为没有提供足够的匹配参数 9.3 揭秘路由如何绑定到操作 9.3.1 高层次请求的路由管道 主要由以下几步组成 ① UrlRoutingModule 尝试使用在RouteTable中注册的路由匹配当前请求 ② 如果一个路由匹配成功那么路由模块将从匹配成功的路由中获取IRouteHandler接口对象 ③ 路由模块由IRouteHandler接口的GetHandler方法并返回用来处理请求的IHttpHandler对象 ④ 调用HTTP处理程序中的ProcessRequest方法将要处理的值传给它 ⑤ 在 ASP.NET MVC 中IRouteHandler是MvcRouteHandler类的一个实例MvcRouteHandler转而返回一个实 现了IHttpHandler接口的MvcHandler对象返回的MvcHandler对象主要用来实例化控制器并调用该实例化控制器上的方法 9.3.2 路由数据 调 用GetRouteData方法将返回一个RouteData的实例RouteData包含了关于匹配请求的路由的信息如果匹配成功则会创建一个字 典其中包含从URL中解析出的信息并且路由还会为URL中的每一个参数向字典中添加一个键如{controller}/{action} /{id},所在的字典中至少包含三个键分别为controller、action、id 9.4 自定义路由约束 之前我们讲过可以使用正则表达式对路由进行细粒度的匹配控制除此之前路由机制提供了一个具有单一Match方法的IRouteConstraint接口该接口定义如下 public interface IRouteConstraint         {             bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection);         } 当路由机制评估路由约束时如果约束值实现了IRouteConstraint接口那么这将导致路由机制引擎调用路由约束上的IRouteConstraint.Match方法以确定约束是否满足给定的请求。 路由机制本身以HttpMethodConstraint类的形式提供了IRouteConstraint接口的一个实现。如下定义一个路由只相应GET请求其他请求不响应 routes.MapRoute(name, {controller}, null, new                       {                           httpMethod  new HttpMethodConstraint(GET)                       }); 自定义的约束没有必要关联URL参数因此可以提供一个基于多个URL参数或一些其他约束转载于:https://www.cnblogs.com/tianguook/p/3969876.html
http://www.pierceye.com/news/70848/

相关文章:

  • 许昌网站优化设计公司网站详情
  • 企业网站建设兴田德润怎么联系wordpress设置标题
  • 苏州高端网站设计静态网站用什么做最快
  • 做数据收集网站赣州91人才网赣州招聘信息
  • 旅游网站建设网站目的网站管理登录系统
  • 能帮忙做网站建设wordpress 创建菜单
  • 网站公司建设公司三门峡做网站
  • 厦门seo网站推广windows2012iis网站默认设置
  • 哪个网站可以免费做简历广州seo快速排名
  • 科技+杭州+网站建设wordpress调用排序从大到小
  • 长岛网站建设手机网站字体自适应
  • 英语网站排名直缝钢管网站建设
  • 中山哪家做网站的好东莞专业网站推广公司
  • 城乡建设网站证件查询制作网站哪里好
  • 网站空间费用一年多少随州网站建设推荐
  • 网站开发专业是干嘛的个人备案 网站名
  • 阳泉营销型网站建设网站备案一个主体
  • 网站开发和数据库的关系三亚做网站公司
  • 网站收录地址电子商务网站建设核心是
  • 网站建设需要的网络技术秦皇岛哪里能做网站
  • 天津公司网站怎样制作企业营销策划有限公司
  • 公司办网站大概多少钱wordpress标题去掉私密
  • 如何用网站做推广马鞍山网站建设 明达
  • 深圳市网站维护头像制作免费
  • 网站开发与推广计划书做网站做什么公司好
  • 软件下载平台哪个好做优化的网站电话
  • 网站 建设实验小结阳江东莞网站建设
  • 可信网站标准版腾讯云cdn wordpress
  • 网易企业邮箱登录入口邮箱乐云seo商城网站建设
  • 做商城网站哪里好移动开发网站建设