什么是ASP.NET MVC中的环境路由值及其工作原理?

时间:2012-02-04 15:39:52

标签: asp.net asp.net-mvc

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

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

2 个答案:

答案 0 :(得分:8)

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

让我们通过一个例子来解释

以此路线定义为例:

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. 他在此网址上编辑了某个表单并发回了数据。

  3. 当他点击服务器(执行某些控制器操作)时,所有这些路由值都会被填充,并且现在是上下文路由值的一部分。
  4. Controller执行必须执行的操作,最后我们希望它重定向到应用程序的非管理员部分,因此点击第二个默认路由。< / LI>

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

    1. 请求期间定义的路由值包括:
      • controller =“管理”
      • action =“Apply”
      • securityArea =“用户”
      • permission =“更改”
      • id = 45
    2. 只需要前两个来生成第二个默认路线
    3. 的网址
    4. 剩余的环境路线值会发生什么?
    5. 他们也会被添加到网址中:

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

      我们不希望这样。

    6. 这就是为什么他们被称为环境,因为他们只是*挂在请求中的孤儿。这是我对环境路线值的解释。希望以一种可以理解的方式解释。

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

      如第232页所述

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

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

答案 1 :(得分:0)

生成的url不需要包含当前请求的控制器或操作参数。示例中指示的页面参数被匹配为RouteData中的一个参数,并且控制器和操作由于未提供,因此保留在当前请求中。