ASP.NET MVC实践系列1-UrlRouting

简介:

为了调研ASP.NET MVC是否适合在公司项目中应用,研究了一段时间。感觉网上资料中讲实践的比较少,我在这里总结一下以备以后查用。

ASP.NET MVC 包含了一个强大的URL路由引擎,它允许我们自定义选择使用哪个控制器类,根据不同的参数来控制调用哪个action方法。ASP.NET MVC 中有一套默认的规则来简化控制类以及action方法的调用,如果不了解这个默认规则,在使用中比较容易让人迷惑,我们结合ASP.NET MVC模板来简单了解一下这些默认规则。当我们根据ASP.NET MVC的模板创建一个ASP.NET MVC应用时,我们可以在Global.asax文件中找到以下代码:

复制代码
ExpandedBlockStart.gif Code
public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute(
"{resource}.axd/{*pathInfo}");

            routes.MapRoute(
              
"Default",                                              // Route name
              "{controller}/{action}/{id}",                           // URL with parameters
              new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
          );
            
        }

        
protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
复制代码

 

我们知道Application_Start是在第一个请求访问网站之前就被调用的,所以这个例子中的网站启动的就已经注册了一个路由网站系统中

routes.MapRoute("Default", "{controller}/{action}/{id}",  new { controller = "Home", action = "Index", id = "" } );方法的第一个参数是路由的名字,暂时用不到,假如映射多个路由的时候名字不能重复,第二个参数是Url的格式,第三个参数是个匿名对象,这个匿名对象所表达的是按照第二个参数格式所对应的默认的controller和action以及id是什么,这里我们用一个表格进一步解释一下:

URL Controler类 Action方法 输入参数
/Home/Index/5 HomeController Index(int id) 5
/Home/Edit/5 HomeController Edit(int id) 5
/Home/Index HomeController Index()
/Home HomeController Index()
/ HomeController Index()

观察这个表格我们可以发如果我们输入:http//localhost:4804/Home/Index/5地址,那么路由会调用HomeController的Index(5)的方法,而当输入的地址为http//localhost:4804时,路由会根据匿名对象new { controller = "Home", action = "Index", id = "" }中的默认值来选取相应的Controller和action。

当我们创建第一个ASP.NET MVC应用时我们可以发现一个default.aspx,这个文件其实是用来在网站部署时简化IIS部署的,查看default.aspx.cs文件我们可以看到以下代码:

复制代码
ExpandedBlockStart.gif Code
public void Page_Load(object sender, System.EventArgs e)
        {
            
// Change the current path so that the Routing handler can correctly interpret
            
// the request, then restore the original path so that the OutputCache module
            
// can correctly process the response (if caching is enabled).

            
string originalPath = Request.Path;
            HttpContext.Current.RewritePath(Request.ApplicationPath, 
false);
            IHttpHandler httpHandler 
= new MvcHttpHandler();
            httpHandler.ProcessRequest(HttpContext.Current);
            HttpContext.Current.RewritePath(originalPath, 
false);
        }
复制代码

 

仔细阅读这段代码你会发现,其实它的作用就是将地址转换到根上,也就是将http//localhost:4804/default.aspx转换成http//localhost:4804/,那么路由就可以根据url来选择相应的Controller和action了。

本文转自 你听海是不是在笑 博客园博客,原文链接:http://www.cnblogs.com/nuaalfm/archive/2009/10/26/1589802.html  ,如需转载请自行联系原作者

相关文章
|
6天前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
49 0
|
6天前
|
开发框架 JSON .NET
.Net4.0 Web.config 配置实践
.Net4.0 Web.config 配置实践
|
6天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
23 0
|
6天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
33 0
|
6天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
6 0
|
6天前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
123 5
|
6天前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
35 0
|
6天前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
128 0