ASP.NET MVC 路由(2)

原创|其它|编辑:郝浩|2010-02-04 13:34:39.000|阅读 798 次

概述:在本指导说明中,你会了解到如何把一个自定义的路由加到ASP.NET MVC应用程序中。你会明白如何根据自定义的路由修改Global.asax文件中的默认路由表。

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

创建自定义的路由(C#

    在本指导说明中,你会了解到如何把一个自定义的路由加到ASP.NET MVC应用程序中。你会明白如何根据自定义的路由修改Global.asax文件中的默认路由表。

很多简单的ASP.NET MVC应用程序,默认的路由表能够满足工作要求。然而,你可能遇到特殊的路由需求。在这种情况下,你可以创建一个自定义的路由。

假设,例如,你建立一个博客应用程序。你可能想像这样去控制传入的请求:

/Archive/02-04-2010

    当用户输入这样的请求,你想返回一个符合02-04-2010这个日期的博客目录页面。为了控制这种类型的请求,你就需要创建一个自定义的路由。

列表一中的Global.asax文件包含了一个新定义的路由,名称为Blog,它控制例如/Archive/entry date这样的请求。

1 ---Global.asax(建一个新路由)

using System.Web.Mvc;
using System.Web.Routing;
 
namespace MvcApplication1
{
 
    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 
 
            routes.MapRoute(
                "Blog",                                       // Route name
                "Archive/{entryDate}",            // URL with parameters
                new { controller = "Archive", action = "Entry" } 
            );
 
 
            routes.MapRoute(
                "Default",                                 // Route name
                "{controller}/{action}/{id}",    // URL with parameters
                new { controller = "Home", action = "Index", id = "" }              );
 
        }
 
        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

 

   你加入路由表的顺序是重要的。我们新建的自定义Blog路由被加在已经存在的默认路由之前。如果你把顺序搞反,默认路由总是被自定义的路由取代。

(加粗加斜部分我没搞明白,测试了一下,发现没有被取代,一样会访问默认页。望高手指点)

自定义的Blog路由适合任何以/Archive/开头的请求。因此,以下请求都是符合的:

/Archive/12-25-2009

/Archive/10-6-2004

/Archive/apple

自定义的这个路由映射请求到Archive控制类中的Entry()方法。当这个Entry()方法被调用,entry date被以entryDate为名称作为参数传递。

自定义的Blog路由可以使用列表2中的控制类。

列表2---ArchiveController.cs

 

using System;
using System.Web.Mvc;
 
namespace MvcApplication1.Controllers
{
    public class ArchiveController : Controller
    {
 
        public string Entry(DateTime entryDate)
        {
            return "You requested the entry from " + entryDate.ToString();
        }
 
    }
}

 

    注意列表2中的Entry()方法接受一个日期类型的参数。MVC不会自动把从URL中得到的entry date转换成日期类型。如果从URL中取得的entry date不被转换成日期类型,就会报错(如图1)。

1---参数类型转换错误

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

总结

    本文说明了如何去创建一个自定义路由。了解了如何在Global.asax文件中加一个自定义路由到路由表。讨论了如何把blog的请求映射到ArchiveControllerEntry()


标签:

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

文章转载自:博客园

为你推荐

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


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP