浅析ASP.NET MVC路由配置

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);//路由调试
        }

结果:

 

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值