ASP.NET MVC(三)
ASP.NET Routing 模块的责任是将传入的浏览器请求映射为特有的MVC controller actions。
- 请求 URL
当我们不使用路由的时候 请求 http://server/application/Produt.aspx?id=4, 服务器会请求 Produt.aspx页面并携带一个名为id 的参数。
当使用路由的时候,发出同样的请求时,不能确定会存在Produt.aspx页面。例如,请求http://server/application/Products/show/beverages,路由解析器对 Products show beverages 进行处理。如果路由依据路径规则 server/applicaton/{area}/{action}/{category},就会发现,Productes是 area,它是控制器,action 对应的是 show ,毫无疑问 beverages 是categrory,这样就能正确显示页面。
2. 配置 Route
当创建新的ASP.NET MVC应用程序,这个应用程序被配置 Routing 有两个地方。
2.1 web.config
在配置文件中有4个与routing相关的代码片段:system.web.httpModules代码段,system.web.httpHandlers 代码段,system.webserver.modules代码段以及 system.webserver.handlers代码段。千万注意不要删除这些代码段,如果没有这些代码段,routing将不再运行。
2.2 Global.asax
它包含ASP.NET 应用程序生命周期events的event handlers。这个route table在应用程序的起始event中创将。
默认的route 我就不在这里浪费大家时间了,so easy。 接下来我们看看 如何自定义 Routes
3. Routing 简述
在一个route中,通过在大括号中放一个占位符来定义( { and } )。当解析URL的时候,符号"/"和"."被作为一个定义符来解析,而定义符之间的值则匹配到占位符中。route定义中不在大括号中的信息则作为常量值。
|
Route definition |
Example of matching URL |
|
{controller}/{action}/{id} |
/Products/show/beverages |
|
{table}/Details.aspx |
/Products/Details.aspx |
|
blog/{action}/{entry} |
/blog/show/123 |
|
{reporttype}/{year}/{month}/{day} |
/sales/2008/1/5 |
|
{locale}/{action} |
/US/show |
|
{language}-{country}/{action} |
/en-US/show |
4. 自定义 Routes
在Global.asax 文件中,使用自定义的route来修改默认的route table。
4.1 位置: 自定义的Routes 应放到 默认路由之前,忽略路由之后
4.2 示例
public static void RegisterRoutes(RouteCollection routes)
{
//忽略对 .axd 文件的路由,向访问 webForm一样直接去访问 .axd文件
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //自定义路由
routes.MapRoute(
"Blog", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Blog", action = "Index", id = UrlParameter.Optional } // 参数默认值
); //默认路由
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
} protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); // 默认情况下对 Entity Framework 使用 LocalDB
Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True"); RegisterGlobalFilters(GlobalFilters.Filters);
//程序启动时,定义Route规则
RegisterRoutes(RouteTable.Routes);
}
RegisterRoutes
在程序启动的时候, Application_Start() 的时候, 注册路由表信息RegisterRoutes
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("",
"Category/{action}/{categoryName}",
"~/categoriespage.aspx",
true,
new RouteValueDictionary
{{"categoryName", "food"}, {"action", "show"}},
new RouteValueDictionary
{{"locale", "[a-z]{2}-[a-z]{2}"},{"year", @"\d{4}"}}
);
}
RegisterRoutes
参考文献: http://msdn.microsoft.com/en-us/library/cc668201.aspx
ASP.NET MVC(三)的更多相关文章
- 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理
第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. 系列文章 七天学会ASP.NET M ...
- 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理 【转】
http://www.cnblogs.com/powertoolsteam/p/MVC_three.html 第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实 ...
- 学习ASP.NET MVC(三)——我的第一个ASP.NET MVC 视图
今天我将对前一篇文章中的示例进行修改,前一篇文章中并没有用到视图,这次将用到视图.对于前一个示例中的HelloWorldController类进行修改,使用视图模板文件生成HTML响应给浏览器. 一. ...
- Asp.Net MVC<三> : ASP.NET MVC 基本原理及项目创建
MVC之前的那点事儿系列 解读ASP.NET 5 & MVC6系列 MVC模拟(摘自ASP.NET MVC5框架揭秘) Asp.net中,通过HttpModule的形式定义拦截器,也就是路由表 ...
- asp.net mvc 三种过滤器
前几天面试遇到这个问题,发现不是很了解,学习了下,这里记录下来 经常需要将用户的操作记录到日志中,或者是验证用户是否登录了网站, 面对这样的需求,以前的操作是自定义一个统一的全局方法,然后做处理, 在 ...
- 自学asp.net mvc(三)
1.将前台框架的登录页面代码,复制到Login.cshtml. 2.将文本框替换. 3.缓存机制. 4.类图
- ASP.NET MVC(三) TypeScript
TypeScript 是微软开发的 JavaScript 的超集,TypeScript兼容JavaScript,可以载入JavaScript代码然后运行.TypeScript与JavaScript相比 ...
- 自学MVC看这里——全网最全ASP.NET MVC 教程汇总
MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...
- 七天学会ASP.NET MVC(七)——创建单页应用
系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...
随机推荐
- HTML5音频,视频播放
1.此方法可支持多种浏览器 <audio controls="controls"> <source src="1.mp3" ></ ...
- 常用yum命令
yum list 查询所有可用软件包 yum search 关键字 查询和关键字相关的包 yum -y install 包名 加上-y自动回答yes yum -y update 包名 升级 yum ...
- proxy解析
知其所以然 本文不是教程向,倾向于分析科学上网的一些原理.知其所以然,才能更好地使用工具,也可以创作出自己的工具. 科学上网的工具很多,八仙过海,各显神通,而且综合了各种技术.尝试从以下四个方面来解析 ...
- Android笔记:java 中的枚举
部分数据使用枚举比较方便,java中的enmu不如c#中使用方便 记录备忘 以c#中的代码为例 public enum PlayState { /// <summary> /// 关闭 / ...
- attr属性
1.切换图片 $(".tip").hover( function () { $(this).attr("src"," ...
- php sql分离
sql.php <?php $con = mysql_connect("localhost","root","root"); mysq ...
- Android --Android Stuido混淆签名打包
参考博客:Android studio 使用心得(五)—代码混淆和破解apk 参考博客:Android studio 使用心得(四)---android studio 多渠道打包 参考博客:Andro ...
- Android ListView 自定义 Adapter
自定义Adapter类 public class ListViewAdapter extends BaseAdapter { private static final String TAG = Mai ...
- jQuery框架的简单使用(H5)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Hadoop学习(2)-- HDFS
随着信息技术的高度发展,数据量越来越多,当一个操作系统管辖范围存储不下时,只能将数据分配到更多的磁盘中存储,但是数据分散在多台磁盘上非常不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,因此诞 ...