asp.net routing deep dive
DESCRIPTION
ASP.NET Routing gives us the ability to forge our own paths towards a more expressive search friendly web. In this presentation we’ll take a look at the ins and outs of ASP.NET Routing as it is used in both ASP.NET MVC and ASP.NET WebForms and how to customize your web routes to your tailored needs.TRANSCRIPT
ASP.NET Routing Deep DiveIf you name it correctly, they will find it.
2
About Me
Stacy Vicknair, MVP MCPDDevelopment Consultant for Sparkhound
Blog - http://www.wtfnext.comBRAG - http://www.braglunch.comTM - http://www.batonrougespeaks.com
Twitter: @svicknEmail: [email protected]
3
Agenda
− What is routing?− Out of the box ASP.NET MVC routing
− Demo: OOB MVC Routing− Customizing ASP.NET MVC routing
− Demo: RouteConstraints and Routes− Unit Testing ASP.NET MVC routes
− Demo: Unit Testing Routes− Routing in ASP.NET WebForms
− Demo: Routing in WebForms− Helpful links
4
What is ASP.NET Routing?
“ASP.NET routing enables you to use URLs that do not have to map to specific files in a Web site.”
- http://msdn.microsoft.com/en-us/library/cc668201.aspx
www.mysite.com/categories.aspx?categoryName=sports
www.mysite.com/categories/sports
5
HttpModules and HttpHandlers
Http Module 1
Http Module 2
Http Module 3
Http Handler
Http Handler
Http Handler
6
ASP.NET Routing (System.Web.Routing)
UrlRoutingModuleIHttpModule
PageRouteHandlerIRouteHandler
UrlRoutingHandlerIHttpHandler
Content (Page, etc.)
7
DefaultControllerFactoryIControllerFactory
ASP.NET MVC Routing (System.Web.Mvc)
UrlRoutingModuleIHttpModule
MvcRouteHandlerIRouteHandler
MvcHandlerUrlRoutingHandler
MyController.Execute()Controller
8
Out of the box MVC Routing
− Routes.IgnoreRoute()− System.Web.Routing.StopRoutingHandler
− Routes.MapRoute()− System.Web.Mvc.RouteCollectionExtensions− Parameters
− string name – “MyUniqueName”− string url – “{controller}/{action}/{id}”− Object defaults - new { controller = "Home", action = "Index”} − Object constraints – new {id = “[0-9]+”}− string[] namespaces - new[] { "Myproject.MyControllers"}
9
DEMO – Out of the box MVC Routing
10
Customizing ASP.NET MVC Routing
− Three main areas for routing customization− RouteConstraints
− Implementing constraints that require more logic than RegEx− Created by implementing System.Web.Routing.IRouteConstraint
− Routes− Allow for control over how route data is parsed or route paths
are determined− Created by subclassing System.Web.Routing.RouteBase− Default is Route ex. RouteCollection.Add(new Route(…))
− RouteHandlers− Allow for preprocessing before default RouteHandler behavior
− ex. RouteData modifications
11
DEMO – RouteConstraints and Routes
12
Unit Testing Routes
− Use RouteTable.Routes.GetRouteData()− Requires mocked HttpContext (to provide the URL)
− Enumerate over RouteData to ensure the proper information is returned
− Alternative is MVCContrib− string.ShouldMapTo<T>(c => c.Action());
13
DEMO – Unit Testing with Routes
14
Adding Routing to ASP.NET WebForms
− In the Global.asax, add a reference to System.Web.Routing
− Add routes via RouteTable.Routes.MapPageRoute()− Update links to use routes
− RouteUrl− GetVirtualPath
− Get Routing Data− RouteValue− RouteData.Values[]
15
DEMO – Routes in ASP.NET WebForms
16
Agenda
− What is routing?− Out of the box ASP.NET MVC routing
− Demo: OOB MVC Routing− Customizing ASP.NET MVC routing
− Demo: RouteConstraints and Routes− Unit Testing ASP.NET MVC routes
− Demo: Unit Testing Routes− Routing in ASP.NET WebForms
− Demo: Routing in WebForms− Helpful links
17
Helpful Links
http://mvccontrib.codeplex.com/ - MVCContribhttp://msdn.microsoft.com/en-us/library/dd329551.aspx - Webforms
Google or Bing: ASP.NET Routing
References:http://www.15seconds.com/Issue/020417.htmhttp://msdn.microsoft.com/en-us/library/cc668201.aspxhttp://blogs.msdn.com/b/alikl/archive/2009/04/02/how-asp-net-mvc-works-for-aspiring-architects-
2.aspxhttp://blog.didsburydesign.com/2010/02/how-to-allow-hyphens-in-urls-using-asp-net-mvc-2/http://stackoverflow.com/questions/1107507/asp-net-mvc-custom-route-handler-constrainthttp://haacked.com/archive/2007/12/17/testing-routes-in-asp.net-mvc.aspx
18
About Me
Stacy Vicknair, MVP MCPDDevelopment Consultant for Sparkhound
Blog - http://www.wtfnext.comBRAG - http://www.braglunch.comTM - http://www.batonrougespeaks.com
Twitter: @svicknEmail: [email protected]