zoukankan      html  css  js  c++  java
  • ASP.NET MVC实践系列1UrlRouting

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

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

    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文件我们可以看到以下代码:

    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了。


    作者:Lance
    出处:http://www.cnblogs.com/nuaalfm/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    看门狗定时器
    fork 和 exec
    openwrt procd分析
    减肥经验总结
    gcc
    laravel5验证码
    laravel5通过auth.attempt事件加入登陆验证码
    双向链表
    mysql5.6源码安装
    laravel4通过控制视图模板路劲来动态切换主题
  • 原文地址:https://www.cnblogs.com/nuaalfm/p/1589802.html
Copyright © 2011-2022 走看看