ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
2013-02-28 16:04
531 查看
引言--
在初级篇中,我们介绍了如何利用基于ASP.NET MVC的Web程序中的Global文件来简单的重写路由。也介绍了它本身的局限性-依赖于路由信息中的键值对:
如果键值对中没有的值,我们无法将其利用凑出我们想要的URL表达式。
初级篇传送门:使用Global路由表定制URL
在进阶篇中,我们将介绍ASP.NET 路由相关类的基类-抽象类RouteBase,并演示如何通过继承它,让URL重写和优化变成Free Style。
一,老板的需求
假设我们是手机销售网站的一名程序猿(承接初级篇),经过第一次的URL重写之后,我们的手机分类页面的URL的改变:
在初级篇中,我们介绍了如何利用基于ASP.NET MVC的Web程序中的Global文件来简单的重写路由。也介绍了它本身的局限性-依赖于路由信息中的键值对:
如果键值对中没有的值,我们无法将其利用凑出我们想要的URL表达式。
初级篇传送门:使用Global路由表定制URL
在进阶篇中,我们将介绍ASP.NET 路由相关类的基类-抽象类RouteBase,并演示如何通过继承它,让URL重写和优化变成Free Style。
一,老板的需求
假设我们是手机销售网站的一名程序猿(承接初级篇),经过第一次的URL重写之后,我们的手机分类页面的URL的改变:
http://www.xxx.com/category/showcategory?categoryid=0001&view=list&orderby=price&page=1 => http://www.xxx.com/category/0001[/code]
现在老板又提出了新的需求,URL的语义化,从而更好的反应网站的结构:http://www.xxx.com/ca-categoryname
比如Nokia是一个分类,那么对应URL为 /ca-nokia,如果是iPhone分类,URL则对应 /ca-iphone。ca前缀的意思是分类category。
对于这个需求简单的配置Global文件是无法做到的。首先我们来介绍一下ASP.NET 路由的所有类的基类RouteBase。
二,RouteBase类简介与运行机制
1. RouteBase类位于System.Web.Routing命名空间,结构如下:public abstract class RouteBase { protected RouteBase(); public abstract RouteData GetRouteData(HttpContextBase httpContext); public abstract VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values); }
GetRouteData:根据Http请求信息返回一个对象-包含路由定义的值(如果该路由与当前请求匹配)或 null(如果该路由与请求不匹配)。
GetVirtualPath:检查路由值是否与某个规则匹配,返回一个对象(包含生成的 URL 和有关路由的信息)或 null(如果路由与 values 不匹配)。
RouteBase:初始化该类供继承的类实例使用。此构造函数只能由继承的类调用。
看完以上定义,可能大家会晕忽忽。我们来弄一个简单的例子说明这几个方法是如何运作的。
首先我们新建一个类库JohnConnor.Routing,并且继承抽象类RouteBase:
View Code@model List<JohnConnor.Models.Category> @{ ViewBag.Title = "主页"; } <h2><a href="@Url.Action("Index", "Home")">首页</a></h2> <p> @foreach (var item in Model) { <a href="@Url.Action("ShowCategory", "Category", new { id = item.CategoeyID })">@item.CategoeyName</a> } </p>
三个分类连接会得到这样的结果<a href="/ca-nokia">Nokia</a> <a href="/ca-iphone">iPhone</a> <a href="/ca-anycall">Anycall</a>
点击每一个连接都会先进入我们的处理程序,生成相应的路由值-调用CategoryController.Showcategory(string id)方法根据id显示相应的分类页面。
相关文章推荐
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
- [转]ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
- [转载]ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL(转)
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL(转)
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
- ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL
- ASP.NET MVC URL重写与优化