zoukankan      html  css  js  c++  java
  • 路由

    ASP.NET MVC 框架中的路由主要有两种用途:

     1.匹配传入的请求,并把这些请求映射到控制器操作

     2.构造传出的URL,用来响应控制器操作

     1.对比路由和URL重写

     RUL重写关注的是将一个URL映射到另一个URL,路由关注的则是如何将URL映射到资源。当传入 请求和路由匹配时就会执行该段代码。

    2.路由方法

    路由分为:传统路由特性路由(mvc5新增的)

     2.1定义特性路由

       路由定义是从URL模板开始的,因为它指定了路由相匹配的模式。路由定义可以作为控制器类或操作方法的特性。路由可以指定它的URL及其默认值。

    1.路由URL

       我们需要把默认的RouteConfig修改一下。

     

     

    注意:这个时候我们访问   /Home/About  是会报找不到资源的。 /About才是正确的

    如果对于操作多个URL,就可以使用多个路由特性。例如:想让首页通过/、/home和/home/index这几个URL都能访问。

     注:传入路由特性的字符串叫做路由模板,它就是一个模式匹配规则,决定了这个路由是否适用于传入的请求。 上面显示的是静态路由,没有传入参数。

    2.路由值

       有时候我们需要显示商品的信息,这个时候需要利用占位符  {xx}

     

      当特性路由匹配并运行操作方法时,模型绑定会使用路由的路由参数为同名的方法参数填充值,后面会讨论路由参数与方法参数的不同点。

    3.控制器路由

     对于同一个控制器中,我们不不必针对每个操作方法,可以在看控制器头部申明。

     

    在操作方法级别指定路由特性时,会覆盖控制器级别指定的任何路由特性。如果在Index()方法上只有第一个路由特性,尽管控制器有一个默认路由home/{action},也不能访问

     home/index。  RoutePrefix,可以仅在一个地方路由以 home/开头。

      

    4.路由约束

       因为方法参数的名称正好位于路由特性及路由参数名称的下方,所有很容易忽视这两种参数的区别 

     

    5.路由的默认值

     我们访问 routetest 会直接报错,定义的路由只匹配包含两个段的url

     

     设置参数可选

     6.定义传统路由

    我们项目新建完成后,会生成一个RouteConfig.cs 里面会生成默认的 路由配置,我们直接F5运行项目,它会直接去找  test/index 这个方法

     

     MapRoute 方法的最坚定形式是采用路由名称和路由模板(路由名称后面介绍)。路由模板是一种模式匹配规则,用来决定改路由是否应该处理传入的请求(基于请求的URL决定)。特性路由和传统路由最大的区别在于如何将路由连接到操作方法、传统路由依赖的是名称字符串而不是特性来完成。

    1.路由值

     controller和action参数很特殊,应为它们映射到控制器和操作的名称,是必需参数但不是全部参数。

    下面介绍一些匹配规则:

    {controller}/{action}/{id}      test/index/123   

    {controller}/{action}.html/{id}      test/index.html/123    不能匹配:  test/index/123   

    demo/{controller}/{action}/{id}   demo/test/index/123    不能匹配:  /test/index/123

     还有比较灵活的路由语法规则:在路劲段中允许字面值和路由参数混合在一起,但不允许出现连续的路由参数。

    {xx}-{yyy}/{controller}/{action}

    {controller}.{action}.{id}

    都是有效的路由,但是

    {controller}{action}/{id} 不是有效的路由

    路由以及匹配示例:

    {actionller}/{action}/{genre}           /test/list/index

    service/{action}-{format}             /service/display-xml

    {report}/{year}/{month}/{day}      /sales/2018/1/123

     只需要记住,除非路由提供了controller和action 参数,否则MVC不知道为URL允许那些代码。

    2.路由的默认值

     3.路由约束

     4.结合使用特性路由和传统路由

     

    5.路由命名     在一个项目中每一个的路由名称请保持唯一,就算有区域在也需要保持唯一,避免二义性。

    对于我们的多路由而言,我们需要把最难匹配的规则卸写在最上面,应为一个匹配到了下面就不会再进行匹配了。 多路由规则:由难到简

    6.MVC区域

      项目有多个功能,都可以创建MVC区域来管理。右键我们的项目,点击新增

     

    每一个区域相当于一个小的MVC项目。它会有单独的控制器,视图等等

    区域路由冲突: 如果存在相同名称的控制器,其中一个在区域中,另一个在应用的根目录下,就会抛出异常。

    最佳解决办法:设置不一样的名字

     网上一般给的解决办法是在路由中设置命名空间,设置的没有什么问题,它还是报错,路由名称不要起一样的名字(强制自己),也就是不要创建了一个区域去重命名

    设置我设置之后,依旧会报错,自己去把名字改下吧。。。。。

    DataTokens:

     1.IgnoreRoute  忽略路由

    创建了项目,在我们的RouteConfig 都会存在一句话

     默认情况下,路由机制会忽略那些映射 到磁盘物理文件的请求,也就是(CSS,JPG,JS)的请求被路由忽略,ASP.NET的Web资源处理程序——WebResource.axd——的请求是一个HTTP处理程序来处理的,不需要我们的路由处理,我们可以将其忽略。

  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/8735288.html
Copyright © 2011-2022 走看看