代码改变世界

初识ASP.NET 3.5 MVC 路由 在WebForm项目中使用路由

2011-07-30 07:06  Kevin-wang  阅读(299)  评论(0编辑  收藏  举报

路由程序集System.Web.Routing位于.NET框架3.5的SP1版本中,是与ASP.NET3.5 MVC分离的,所以在传统的Web Form项目中也可以使用路由。

ASP.NET 路由使您可以处理未映射到 Web 应用程序中物理文件的 URL 请求。默认情况下,在动态数据或 MVC 框架的一个 ASP.NET 应用程序中启用 ASP.NET 路由,而不在 ASP.NET 网站项目中启用路由。

因此,若要在 ASP.NET 网站中使用路由,必须采取措施来启用。

要实现在WebForm中使用路由,首先需要创建实现IRouteHandler接口的WebFormRouteHandler类,然后在全局应用程序类中配置路由的映射就可以了。

WebFormRouteHandler代码如下:

   1:  using System.Web;
   2:  using System.Web.Compilation;
   3:  using System.Web.Routing;
   4:  using System.Web.UI;
   5:  namespace MVCWebApplication1
   6:  {
   7:      public class WebFormRouteHanlder : IRouteHandler
   8:      {
   9:          public string VirtualPath { get; private set; }
  10:          public WebFormRouteHanlder(string virtualPah)
  11:          {
  12:              VirtualPath = virtualPah;
  13:          }
  14:          public IHttpHandler GetHttpHandler(RequestContext requestContext)
  15:          {
  16:              var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler;
  17:              return page;
  18:          }
  19:      }
  20:  }
在Global.asax中配置路由:
   1:  using System;
   2:  using System.Web.Routing;
   3:  namespace MVCWebApplication1
   4:  {
   5:      public class Global : System.Web.HttpApplication
   6:      {
   7:          protected void Application_Start(object sender, EventArgs e)
   8:          {
   9:              RegisterRoutes(RouteTable.Routes);
  10:          }
  11:          public static void RegisterRoutes(RouteCollection routes)
  12:          {
  13:              routes.Add("Named", new Route("foo/bar", new WebFormRouteHanlder("~/forms/blech.aspx")));
  14:              routes.Add("Number", new Route("one/two/three", new WebFormRouteHanlder("~/forms/haha.aspx")));
  15:          }
  16:      }
  17:  }

还需要在Web.config中配置System.Web.Routing的引用!

   1:        <httpModules>
   2:          <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
   3:        </httpModules>

运行,访问http://localhost:5598/foo/bar 。OK~~~~

参考:MSDN,MVC架构与实战  地址:如何:MSDN帮助 对 Web 窗体使用路由