【发布时间】: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
我是 ASP.NET MVC 的新手。我读了Professional ASP.NET MVC 3,它有两页谈论环境路由值,但我不明白它是如何工作的。我在谷歌上搜索“asp.net mvc 环境路由值”,但仍然没有找到任何解释它是什么或它是如何工作的文章或网站。
我想知道 ASP.NET MVC 中的“环境路由值”是什么?它是如何工作的?
【问题讨论】:
标签: asp.net asp.net-mvc
环境路径值与当前路径出站处理不需要的所有值相关。
以这条路线定义为例:
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 }
);
用户进行了一些管理,因此他当前位于由第一个路由定义提供的 URL:
/users/change/apply/45
他在此 URL 上编辑了一些表单并将数据发回。
现在,如果我们看一下 #4 中的 URL 生成。会发生什么?
它们也会被添加到 URL 中:
/Home/Index/?securityArea=Users&permission=Change
我们不希望这样。
这就是为什么他们被称为环境,因为他们只是*挂在那里孤立的请求。这是我对环境路由值的解释。希望以易于理解的方式进行解释。
我还在一个 of my blog posts 中写过关于删除这些环境值的文章,其中我提供了一个自定义路由类来执行此删除。
您链接的书中的环境路由值也指出站路由处理,但它将环境值称为我们不需要为出站路由处理提供的环境值,因为它们将取自当前值(即 controller 和 action 也可以是环境值)。
本书虽然没有谈到我在上面的答案中概述的环境路由值的问题。所有定义的路由值都可以是环境的,当我们没有意识到路由的工作原理时,它们可能会导致问题。
【讨论】:
生成的 url 不需要包含当前请求的控制器或动作参数。示例中指示的页面参数匹配为 RouteData 中的参数之一,并且控制器和操作,因为它们没有被提供,所以它们在当前请求中保持不变。
【讨论】: