哎 昨天写的笔记忘记保存了就帖个图片吧
配置路由
ASP.NET MVC路由负责确定由哪个控制器操作来处理特定的URL请求。它由以下属性组成。(Unique name 路由唯一的名字,URLpattern 将URL解析成有意义词语的简单模式语法,Defaults URL模式里定义的参数变量的默认值。)
Constraints 为URL匹配模式定义更严格的约束规则。默认的ASP.NET MVC项目添加了一个通用的路由,它使用以下URL习惯来解析特定的URL请求,即分三个部分,包含在大括号内:Controller action id.{controller}/{action}/{id} 注册路由使用的扩展方法是MapRoute(),在程序启动的时候注册(在App_Start/RouteConfig.cs文件里):
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
除了Name 和URL_Pattern外,路由器同样定义了模式匹配事件中使用的一系列默认参数,但实际上并没有给每个参数提供默认值。
表中的第一个URL(、auctions/auction/1234) 完美匹配了路由模式,它符合路由模式各个部分的定义。但是,如果继续往下看这个表,逐渐移除URL的各个部分,就会 发现那些URL未提供的默认值。
这是个ASP.NET MVC如何使用“惯例优先原则” 的非常重要的例子之一:当应用程序启动时,ASP.NET MVC会程序集里查找所有可用的控制器,这些控制器类都继承自System.web.MvcIcontroller接口或它的子类,并且名字带有“Cotroller” 后缀。当路由器框架确定需要访问的控制以后,它就会去掉后缀,来获取控制器类的名称。所以,当需要使用控制器时直接使用它的简称即可,比如AuctionsController指的控制器类是和 AUctions 而HomeController指的就是“Home”。另外值得注意的是,路由中的控制器和操作设置不区分大小写, 这意味着------、Actions/Recent、/auctions/Recent、/auctions/recent aunTionS/rEceNt都是一样的。下如上所示URL路由包含了路由引擎可以提取的丰富信息。为了处理ASP.NET MVC请求,路由引擎必须能够确定两个关键信息:控件器和操作。运行时,路由引擎会把这些值传递给ASP.NET MVC去创建和执行特定的控制器和操作。