Creating Custom Routes (C#)

在本次教程里,你将学到如何在asp.net mvc应用程序里添加一个自定义的路由。你也将学会如何在Global.asax里用自定义的路由去修改默认路由表。

在许多asp.net mvc应用程序里,默认路由表可以很好的工作。然而,你可能已经发现到你需要一个特殊的路由。在这种情况下,你可以创建一个自定义的路由。

想象一下,例如,你正在建立一个博客应用程序。你可能想要处理一个进来的像下面这样的http请求:
/Archive/12-25-2009

当一个使用者输入这个请求后,你想返回一张对应于12/25/2009德博客网页给他,为了处理这类请求,你需要创建一个自定义路由。

下面的Global.asax文件包含一个新的自定义的路由(叫 Blog),它会处理像这样( /Archive/ entry date)的请求。
Listing 1 – Global.asax (with custom route)
ContractedBlock.gifExpandedBlockStart.gifCode
 1using System.Web.Mvc; 
 2using System.Web.Routing;
 3
 4namespace MvcApplication1 
 5ExpandedBlockStart.gifContractedBlock.gif
 6        public class MvcApplication : System.Web.HttpApplication 
 7ExpandedSubBlockStart.gifContractedSubBlock.gif        
 8                public static void RegisterRoutes(RouteCollection routes) 
 9ExpandedSubBlockStart.gifContractedSubBlock.gif                
10                routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
11                routes.MapRoute( "Blog"// Route name 
12                         "Archive/{entryDate}"// URL with parameters 
13ExpandedSubBlockStart.gifContractedSubBlock.gif                         new { controller = "Archive", action = "Entry" } // Parameter defaults
14                          );
15                routes.MapRoute( "Default",// Route name 
16                        "{controller}/{action}/{id}"// URL with parameters 
17ExpandedSubBlockStart.gifContractedSubBlock.gif                        new { controller = "Home", action = "Index", id = "" } // Parameter defaults
18                         );
19                }

20                protected void Application_Start()
21ExpandedSubBlockStart.gifContractedSubBlock.gif                {
22                        RegisterRoutes(RouteTable.Routes); 
23                }

24        }

25}
 

你添加到路由表里的路由命令是重要的。我们自定义的Blog路由会在存在的默认路由之前被添加上去。如果你 颠倒这个命令,那么默认路由将总是被调用,而自定义路由不会被调用。

自定义的路由总是匹配以/Archive/开头的任意请求,所以,它会匹配下面所有的请求:

/Archive/12-25-2009

/Archive/10-6-2004

/Archive/apple

自定义路由引导进来的请求到一个叫Archive 的控制器,并调用Entry()动作。当Entry动作被调用。输入的日期将被作为一个叫entryDate的参数传递过去。

你可以通过下面的控制器使用Blog路由:
Listing 2 – ArchiveController.cs
ContractedBlock.gif ExpandedBlockStart.gif Code
using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
ExpandedBlockStart.gifContractedBlock.gif
{
    
public class ArchiveController : Controller 
ExpandedSubBlockStart.gifContractedSubBlock.gif    

        
public string Entry(DateTime entryDate) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
return "You requested the entry from " + entryDate.ToString(); 
        }

    }
 
}
注意到Entry()方法接受一个datetime类型的参数。而mvc framework已经很完美了,它会自动地把从URL得来的日期字符串转变为datetime类型。
如果从URL得来的日期字符串没能成功地转换为datetime类型,错误就会发生(figure 1)
Figure 1 – Error from converting parameter


Summary


 

本次教程的目标是展现如何创建一个自定义的路由。你学会了怎样去添加一个自定义的路由到Global.asax(博客的入口)里的路由表里。
我们讨论了如何引导博客入口点的请求到叫 ArchiveController的控制器何叫 Entry()的动作上。

转载于:https://www.cnblogs.com/liyou-blog/archive/2009/09/27/1575258.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值