浅析ASP.NET MVC路由配置

来源:互联网 发布:js数组遍历方法 编辑:程序博客网 时间:2024/04/29 19:20

URL相关概念

      http://example.com/albums/list.aspx  我们可以确定该站点的目录中含有一个albums文件夹,并且在该文件夹下还有一个list.aspx文件

      URL和文件系统之间这种一一对应关系并不适用大部分基于MVC的Web框架。一般来说,这些框架采用不同的方法将URL映射到某个类上的方法调用,而不是映射到磁盘上的某个物理文件,这些映射到的类通常称为控制器。URL是统一资源定位符(Uniform Resource Locator)的首字母缩写,但这种情况下,资源是一个抽象的概念,既可以指一个文件,也可以指方法调用的结果或服务器上的一些其他内容。

路由概述

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

      匹配传入的请求(该请求不匹配服务器文件系统中的文件),并将这些请求映射到控制器操作。

      构造传出的URL,用来相应控制器中的操作。

路由的定义

      每个ASP.NET MVC应用程序都至少需要一个路由来定义自己处理请求的方式,但通常情况下,程序总是有一个或多个路由。路由的定义是从URL模式开始的,因为它指定了与路由相匹配的模式。路由可以指定它的URL及其默认值,除此之外,它还可以约束URL的各个部分,提供关于路由如何、何时与传入的请求URL相匹配的严格控制、

     在刚建立的一个ASP.NET MVC应用程序中,Global.asax.ax—Application_Start方法中抵用了一个名RegisterRoutes方法,用来为应用程序注册需要的路由

例子:一个非常简单的注册路由方法:

<span style="font-size:18px;">public static voidRegisterRoutes(RouteCollection routes){   routes.MapRoute("simple","{first}"/"{second}"/"{third}")}</span>

MapRoute方法最简单形式是采用路由名称和路由的URL模式。


 

      路由URL由若干个URL段(段是指两个“/”之间的所有内容,不包括两端的斜杠)组成,每个段都包含了一个由一对花括号限定的定位符参数。

ASP.NET MVC框架要求使用一些特定的参数名称——{controller}和{action}

上面的实例如果真的要请求,会出现错误,赢修改为

public static voidRegisterRoutes(RouteCollection routes){   routes.MapRoute("simple","{controller}"/"{action}"/"{id}")}


第一个参数是控制器名,第二个是action方法名,第三个是方法的参数,如果没有参数,只匹配前两个。

 

路由约束


相应约束:{year=@“\d{4}”,month=@"\d{2}",day=@"\d{2}"},使用正则表达式约束,和Regex类使用的格式相同。

 

路由机制将忽略那些映射到磁盘物理文件的请求—— IgnoreRoute、StopRoutingHandler

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); public static voidRegisterRoutes(RouteCollection routes){   routes.Add(new Route    (           "{resource}.axd/{*pathInfo}",      new StopRoutingHandler()    )}


路由的调试——Routing Debugger

引用RouteDebug.dll(自己下载)

然后

 

        protected void Application_Start()        {            AreaRegistration.RegisterAllAreas();            // 默认情况下对 Entity Framework 使用 LocalDB            Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");            RegisterGlobalFilters(GlobalFilters.Filters);            RegisterRoutes(RouteTable.Routes);            RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);//路由调试        }

结果:

 

0 0
原创粉丝点击