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
1
ASP.NET ROUTING DEEP DIVE
Stacy VicknairSparkhound
2
Welcome to Houston TechFest
• Please turn off all electronic devices or set them to vibrate.• If you must take a phone call, please do so in the lobby so as not
to disturb others.• Thanks to our Diamond Sponsors:
Thank you for being a part of the 7th Annual Houston TechFest!
3
Information• Speaker presentation slides will be available at
www.houstontechfest.org within a week
• Don’t forget to complete the Bingo card to be eligible for door prizes
ABOUT MEStacy Vicknair, MVPSenior Development Consultant
Bloghttp://www.wtfnext.com
Toastmastershttp://www.toastmasters.orghttp://www.batonrougespeaks.com
Twitter: @svicknEmail: [email protected]
“BE A HERO. GROW A BEARD.”The Sparkhound Foundation is sponsoring the growth of facial hair to raise Prostate Cancer Awareness.
Through Septembeard we will raise funds for the research and treatment of prostate cancer.
Want to join us? Learn more at Septembeard.org.
6
Agenda• What Is Routing?• Out of the Box ASP.NET MVC Routing• Customizing ASP.NET MVC Routing• Unit Testing ASP.NET MVC Routes• Routing In ASP.NET WebForms• Helpful Links
77
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
8
HttpModules and HttpHandlers
Http Module 1
Http Module 2
Http Module 3
Http Handler
Http Handler
Http Handler
9
ASP.NET Routing (System.Web.Routing)
UrlRoutingModuleIHttpModule
PageRouteHandlerIRouteHandler
UrlRoutingHandlerIHttpHandler
Content (Page, etc.)
10
DefaultControllerFactoryIControllerFactory
ASP.NET MVC Routing (System.Web.Mvc)
UrlRoutingModuleIHttpModule
MvcRouteHandlerIRouteHandler
MvcHandlerUrlRoutingHandler
MyController.Execute()Controller
11
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"} 1
1
12
DEMO – Out of the box MVC Routing
12
13
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
14
DEMO – RouteConstraints and Routes
14
15
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());– Not “officially” ported to MVC4 by Ndepend yet.• Search NuGet for MvcContrib.Mvc4 to find a port
16
DEMO – Unit Testing with Routes
16
17
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[]
18
DEMO – Routes in ASP.NET WebForms
18
19
Agenda• What Is Routing?• Out of the Box ASP.NET MVC Routing• Customizing ASP.NET MVC Routing• Unit Testing ASP.NET MVC Routes• Routing In ASP.NET WebForms• Helpful Links
20
Helpful LinksTHE MOST IMPORTANT LINK I COULD EVER TELL YOU:http://aspnetwebstack.codeplex.com/
http://mvccontrib.codeplex.com/ - MVCContribhttp://msdn.microsoft.com/en-us/library/dd329551.aspx - Webforms
Google or Bing: ASP.NET Routing
Slides / Code will be available at http://www.wtfnext.com
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
21
Please Leave Feedback During Q&AIf you leave session feedback and provide contact information, you will be qualified for a prize
Scan the QR code to the right or go to bit.ly/htf130202