ASP.NET MVC 路由(1)

原创|其它|编辑:郝浩|2010-02-04 13:33:46.000|阅读 641 次

概述:在这份指导说明中,你将会知道每个基于ASP.NET MVC应用程序的一个相当重要的特点,那就是ASP.NET Routing(路由)。ASP.NET Routing主要负责把浏览请求映射到指定的控制部分的具体方法。看完本说明之后,你将会明白标准的路由表是如何把请求映射到控制部分的具体方法的。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

ASP.NET MVC Routing 概述(C#)

    在这份指导说明中,你将会知道每个基于ASP.NET MVC应用程序的一个相当重要的特点,那就是ASP.NET Routing(路由)。ASP.NET Routing主要负责把浏览请求映射到指定的控制部分的具体方法。看完本说明之后,你将会明白标准的路由表是如何把请求映射到控制部分的具体方法的。

使用默认路由表

    当你创建了一个新的ASP.NET MVC应用程序的时候,该程序已经被配置以便使用ASP.NET 路由。ASP.NET路由被组织在两个地方:

    第一个地方:ASP.NET路由功能是在你应用程序的WEB配置文件(Web.config)中启用的。在这个配置文件中有四个路由相关部分:

 

 

 

 

小心不要误删掉这些部分,因为没有这些路由将不能再工作。

    第二个地方:更为重要一点,在应用程序的Global.asax文件中创建了一个路由表,Global.asax文件比较特殊,它包含了应用程序生命周期内的一些请求的处理部分。它是在程序开始期间被创建的。

在列表一文件中包含一个ASP.NET MVC应用程序默认的Global.asax文件。

列表1 ---Global.asax.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Routing;

 

namespace MvcApplication1

{

    // Note: For instructions on enabling IIS6 or IIS7 classic mode,

    // visit http://go.microsoft.com/?LinkId=9394801

 

    public class MvcApplication : System.Web.HttpApplication

    {

        public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 

            routes.MapRoute(

                "Default",                                              // Route name

                "{controller}/{action}/{id}",                           // URL with parameters

                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults

            );

 

        }

 

        protected void Application_Start()

        {

            RegisterRoutes(RouteTable.Routes);

        }

    }

}

 

    当MVC应用程序第一次被访问,Application_Start()方法就被自动调用,而这个方法用调用了RegisterRoutes()方法,这个方法创建路由表。

默认的路由表包含了一个路由(Default)。默认路由映射URL的第一部分到一个控制名,第二部到控制方法,第三部分到参数。

    假设你在浏览器地址栏中输入以下地址:

/Home/Index/3

    默认的路由映射这个URL成如下参量:

Controller = Home

Action = Index

Id = 3

(形象理解:这件事情是哪个政府部分管理的?这个部门具体负责这件事的人是谁?要送什么才能处理我的事情?

    当你请求这个URL,以下代码将被执行:

HomeController.Index(3)

默认的路由包含3个参数.如果你不提供控制,那么控制参数默认为Home。如果你不提供方法,那么方法默认为Index。最后,如果你不提供id,则默认是一个空串。

(加粗加斜)部分指的是在浏览器中输入的URL省略,并不是在Global.asax.cx中。

   我们来看一些例子,研究一下默认路由是如何映射URL到控制方法的。假设你在游览器地址栏输入如下URL

/Home

因为默认的路由参量是默认的,键入这个URL将导致列表2HomeConroller类的Index()方法被调用。

列表2---HomeController.cs

using System.Web.Mvc;
 
namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(string id)
        {
            return View();
        }
    }
}

 

    在列表2中,HomeController类包含一个Index()方法,它有一个id参数。URL /Home请求会导致Index()方法被调用,传入的Id参数是一个空串。

因为MVC framework映射控制方法的这种方式,/Home的请求也会导致列表3中的HomeController类的Index()方法被执行。

Listing 3---HomeController.cs(Index方法没有参数)

using System.Web.Mvc;
 
namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}

 

    在列表3中的Index()方法不接受任何参数。/Home请求导致Index()方法被调用。/Home/Index/3也调用这个方法(Id被忽略)。

/Home请求也会导致列表4 中的HomeController类被调用。

Listing 4 ---HomeController.cs(Index 方法参数可空)

using System.Web.Mvc;
 
namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(int? id)
        {
            return View();
        }
    }
}

     在列表4中的Index()方法有一个整型参数。因为它参数可空,故它能够无误的调用。但是如果此时请求/Home/Index/3,参数3被接受,不会被忽略。

最后,用/Home请求列表5中的方法会导致一个异常,因为它的Id参数不可空。如果你企图去用这会的请求,你会得到报错的显示,如图1

Listing5 ---HomeController.cs(Index方法有一个Id参数)

 

using System.Web.Mvc;
 
namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(int id)
        {
            return View();
        }
    }
}

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/Home/Index/3请求,换句话说,它就可以正确的调用列表5中的方法。Id参数值为3

总结

    这篇指导说明的综旨是提供你一个简短的入门ASP.NET路由。我们研究了新建的 ASP.NET MVC项目的默认路由表。你知道了默认的路由如何把URL映射到控制方法了。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP