【问题标题】:What is Ambient Route Values in ASP.NET MVC and how it works?什么是 ASP.NET MVC 中的环境路由值以及它是如何工作的?
【发布时间】:2012-02-04 15:39:52
【问题描述】:

我是 ASP.NET MVC 的新手。我读了Professional ASP.NET MVC 3,它有两页谈论环境路由值,但我不明白它是如何工作的。我在谷歌上搜索“asp.net mvc 环境路由值”,但仍然没有找到任何解释它是什么或它是如何工作的文章或网站。

我想知道 ASP.NET MVC 中的“环境路由值”是什么?它是如何工作的?

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    环境路径值与当前路径出站处理不需要的所有值相关。

    我们通过一个例子来解释

    以这条路线定义为例:

    routes.MapRoute(
        "Complex",
        "{securityArea}/{permission}/{action}/{id}",
        new { controller = "Administration", action = "List", id = UrlParameter.Optional }
    );
    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
    

    这种情况下环境路由值的场景是:

    1. 用户进行了一些管理,因此他当前位于由第一个路由定义提供的 URL:

      /users/change/apply/45
      
    2. 他在此 URL 上编辑了一些表单并将数据发回。

    3. 当他访问服务器(执行一些控制器操作)时,所有这些路由值都会被填充,并且现在是上下文路由值的一部分。
    4. 控制器做了它必须做的事情,最后我们希望它重定向到应用程序的 non-admin 部分,所以点击第二个 Default 路由。

    现在,如果我们看一下 #4 中的 URL 生成。会发生什么?

    1. 在请求期间定义的路由值是:
      • controller = "管理"
      • action = "应用"
      • securityArea = "用户"
      • 权限 = “更改”
      • id = 45
    2. 只需要前两个即可生成第二个默认路由的URL
    3. 其余的环境路线值会怎样?
    4. 它们也会被添加到 URL 中:

      /Home/Index/?securityArea=Users&permission=Change
      

      我们不希望这样。

    这就是为什么他们被称为环境,因为他们只是*挂在那里孤立的请求。这是我对环境路由值的解释。希望以易于理解的方式进行解释。

    我还在一个 of my blog posts 中写过关于删除这些环境值的文章,其中我提供了一个自定义路由类来执行此删除。

    如第 232 页所述

    您链接的书中的环境路由值也指出站路由处理,但它将环境值称为我们不需要为出站路由处理提供的环境值,因为它们将取自当前值(即 controlleraction 也可以是环境值)。

    本书虽然没有谈到我在上面的答案中概述的环境路由值的问题。所有定义的路由值都可以是环境的,当我们没有意识到路由的工作原理时,它们可能会导致问题。

    【讨论】:

      【解决方案2】:

      生成的 url 不需要包含当前请求的控制器或动作参数。示例中指示的页面参数匹配为 RouteData 中的参数之一,并且控制器和操作,因为它们没有被提供,所以它们在当前请求中保持不变。

      【讨论】:

        猜你喜欢
        • 2020-08-06
        • 2013-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-14
        • 2012-08-16
        • 2016-05-22
        相关资源
        最近更新 更多