ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL
2016-06-09 23:45
501 查看
http://www.cnblogs.com/John-Connor/archive/2012/05/03/2478821.html
引言--
在初级篇中,我们介绍了如何利用基于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命名空间,结构如下:@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显示相应的分类页面。
------------------------------------------------------进阶篇完---------------------------------------------------
这一篇我花费了不少时间去构思如何用简单的例子讲述继承RouteBase来进行URL重写与优化。
希望能帮助到有用的人。
需要程序源代码朋友点这里:JohnConnor.UrlRewrite.rar
如有任何问题,欢迎指正和讨论。
相关文章推荐
- 约束路由 用正则表达式约束路由 Constraining a Route Using a Regular Expression 精通ASP-NET-MVC-5-弗瑞曼
- 性能工具MiniProfiler在Asp.Net WebForm跟踪EntityFramework
- AspNet Identity and IoC Container Registration
- CocoaPods和版本控制小技巧
- asp.net简单网站的实现
- Web Server 在iis下部署asp网站在iis下
- C#(asp.net)多线程用法示例(可用于同时处理多个任务)
- asp.net实现DropDownList,TreeView,ListBox的无限极分类目录树
- asp.net DataTable相关操作集锦(筛选,取前N条数据,去重复行,获取指定列数据等)
- asp.net提取多层嵌套json数据的方法
- 使用Aspose组件将WORD、PDF、PPT转为图片
- Asp.net MVC 移除不用的视图引擎
- ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序
- ASP.NET Core 中文文档 第一章 入门
- asp.net DataTable相关操作集锦(筛选,取前N条数据,去重复行,获取指定列数据等)
- 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档
- Asp.Net中的控件(一)验证控件 和DropList选择控件
- asp.net 自带的缓存
- Spring3系列12-Spring AOP AspectJ
- asp.net中Page.ClientScript.RegisterStartupScript用法小结