zoukankan      html  css  js  c++  java
  • 第14章 高级路由特性

    ----------------------------------------------------------

    原则:1.应该首先定义最具体的路由。

        2.建议为URL模式中的所有片段变量都提供值。

    注意:1.Html.ActionLink在匹配时,前有打断原则(前面提供值后,后面的变量必须提供值,打断默认值链)

         @Html.RouteLink方法,指定一条路由生成链接(路由name) 

        2.在参数传递给ActionLink方法时,注意将其余变量值传递null。

        3.在区域下面的Web.config中,把<add namespace="System.Web.Optimization"/>去掉  

    提示:1.为了使用保留关键字时,要在前面加@符号,如:new{id="Myid",@class="MyCssClass"}

       2.Html.ActionLink 用于生成a标签的链接,Url.Action用于生成URL文件并非链接

    *   使用URL方案来生成可以嵌入到视图中的输出URL,以便用户可以点击链接,

    并以正确的控制器和动作方法为目标,将表单递给应用程序。(真TM废话,就是用Html.ActionLink等方法生成正确的链接。)

    ---------------------------------------------------------- 

    目录:

      在视图中生成输出URL

      定制路由系统

      使用区域

      URL方案最佳做法

    一.出站URL的路由匹配:

       1.考察路由匹配的三个条件:

          (1)URL模式中定义的每一个片段变量都必须有一个可用的值。

          (2)在给片段变量提供的值中,应当没有违背这条路由所定义的未出现的默认变量

        (Default-Only Variables为其提供了默认值,但未在URL模式中出现的变量)的值。(与默认变量)

          (3)所有片段变量的值均必须满足路由约束。

           注:路由系统不会试图查找出最佳匹配的路由。只会找出最先匹配的路由,然后用这条路由生成URL,

      任何后续路由都会被忽略。当满足条件的第一个Route对象产生一个非空URL时,就终止URL生成过程。

      为各个片段参数所选择的参数值将在其中被替换,并忽略尾部的默认值序列

      如果明确地提供了一些参数,但它们与片段参数或默认参数不符,那么该方法将把这些参数以“名字/值”对的查询字符串形式进行追加。

      路由系统会渴望根据一条路由尽可能形成匹配,在这个意义上,它将重用输入URL的片段变量值。

      @Html.ActionLink("输出URL","Index","Home","https","www.baidu.com","myFragementName",new{id="MyId"},new{id="myAnchorID",@class="MycssClass"})

                标签值,action,contorller,     协议值 ,目标服务器名       ,  URL片段                , 片段变量           ,HTML标签属性

      <a href="https://www.baidu.com/Home/Index/MyId#myFragmentName" id="myAnchorID" class="MycssClass">输出URL</a>

      生成URL(不是链接):@Url.Action("Index","Home",new {id="Myid"})  

                string myActionUrl=Url.Action("Index","Home",new {id="Myid"})  

                RedirectToRouteResult result=RedirectToAction("Index")

                RedirectToRouteResult result=RedirectToAction(new {controller="Home",action="index",id="MyId"})

       

    二、定制路由系统(在系统扩展时可以用)

      1.自定义RouteBase实现两个方法

        GetRouteData(HttpContextBase httpContext):入站URL匹配机制。框架依次对RouteTable.Routes的每个条目调用这个方法,

      直到其中之一返回一个非空值。

        GetVirturalPath(RequestContext requestContext,RouteValueDictionary values): 出站URL生成机制。框架依次对

      RouteTable.Routes的每个条目调用这个方法,直到其中之一返回一个非空值。  

      2.自定义路由处理程序实现IRouteHandler接口:

        GetHttpHandler(RequestContext requestContext)生成IHttpHandler接口,负责对请求进行处理。

       在该接口的MVC实现中,完成实现了:查找控制器、调用动作方法、渲染视图、并将结果定写入到响应中去。


    三、使用区域

      每个区域代表应用程序的一个功能段。每个MVC区域有自己的文件夹结构,能够保持事物分离。

    这会使项目元素与应用程序的每个功能区的相关性更加明显,有助于多个开发人员在同一个项目上工作而不会引起相互冲突。

    区域能过路由系统得到广泛的支持。

      区域在Areas文件夹下创建,以区域名(如Admin)作为子区域文件夹,并包括Controller、Models、Views文件夹。

    Views文件夹下包括Shared文件夹和Web.config文件。有了一个名为“AdminAreaRegistration”类。

    AdminAreaRegistration类定义了RegisterArea方法,注册了一个URL模式为Admin/{controller}/{action}/{id}的路由。

    在Global.asax调用区域注册: AreaRegistration.RegisterAllAreas();


    四、URL方案最佳方法

      1.URL整洁和人性化

        (1)设计URL来描述它们的内容,而不是应用程序的细节。例:/Articles/AnnualReport ,而不是/Website_v2/CachedContentserver/FromCache/AnnualReport

        (2)尽可能采用内容而不是ID号。例:/Articles/AnnualReport,而不是/Articles/2392

      如果必须要使用ID号请将内容加上。      /Articles/2392/AnnualReport        

        (3)不要对HTML页面使用文件扩展名,特殊文件类型除外(.jpg,.pdf,.zip)

        (4)创建一种层次感。例:/Products/Menswear/Shirts/Red ,这样可以猜出父目录的URL。

        (5)不区分大小写。ASP.NET路由系统默认是不区分大小写的。

        (6)避免使用符号、代码、字符序列。单词分隔用“-”短横(my-great-article),不建议用下划线。千万不能用空格。

        (7)不要修改URL。打破链接等于失去商务。必须要修改时,通过永久重定向(301)尽可能长时间地继续支持旧式的URL方案。

        (8)具有一致性。在整个应用程序中采用一种URL格式。URL应该简短、易输入、可剪辑,且持久稳定,形象化网站结构。

      2.Get和post使用选择:

        get请求应该被用于所有只读信息检索(安全交互),post请求应该被用于所有修改程序状态的操作(更改交互)。

        

       

        

        

      

  • 相关阅读:
    移动端屏幕旋转的事件和样式方案。
    active:移动端触摸按钮的效果。
    移动端字体单位该使用px还是rem?
    Cordova/Ionic Android 开发环境搭建
    JavaScript 深拷贝(deep copy)和浅拷贝(shallow copy)
    你不知道的JS之 this 和对象原型(一)this 是什么
    你不知道的JS之作用域和闭包 附录
    你不知道的JS之作用域和闭包(五)作用域闭包
    你不知道的JS之作用域和闭包(四)(声明)提升
    你不知道的JS之作用域和闭包(三)函数 vs. 块级作用域
  • 原文地址:https://www.cnblogs.com/wjs5943283/p/4638723.html
Copyright © 2011-2022 走看看