21
1 ASP.NET ROUTING DEEP DIVE Stacy Vicknair Sparkhound

ASP.NET Routing Deep Dive

Embed Size (px)

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.

Citation preview

Page 1: ASP.NET Routing Deep Dive

1

ASP.NET ROUTING DEEP DIVE

Stacy VicknairSparkhound

Page 2: ASP.NET Routing Deep Dive

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!

Page 3: ASP.NET Routing Deep Dive

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

Page 4: ASP.NET Routing Deep Dive

ABOUT MEStacy Vicknair, MVPSenior Development Consultant

Bloghttp://www.wtfnext.com

Toastmastershttp://www.toastmasters.orghttp://www.batonrougespeaks.com

Twitter: @svicknEmail: [email protected]

Page 5: ASP.NET Routing Deep Dive

“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.

Page 6: ASP.NET Routing Deep Dive

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

Page 7: ASP.NET Routing Deep Dive

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

Page 8: ASP.NET Routing Deep Dive

8

HttpModules and HttpHandlers

Http Module 1

Http Module 2

Http Module 3

Http Handler

Http Handler

Http Handler

Page 9: ASP.NET Routing Deep Dive

9

ASP.NET Routing (System.Web.Routing)

UrlRoutingModuleIHttpModule

PageRouteHandlerIRouteHandler

UrlRoutingHandlerIHttpHandler

Content (Page, etc.)

Page 10: ASP.NET Routing Deep Dive

10

DefaultControllerFactoryIControllerFactory

ASP.NET MVC Routing (System.Web.Mvc)

UrlRoutingModuleIHttpModule

MvcRouteHandlerIRouteHandler

MvcHandlerUrlRoutingHandler

MyController.Execute()Controller

Page 11: ASP.NET Routing Deep Dive

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

Page 12: ASP.NET Routing Deep Dive

12

DEMO – Out of the box MVC Routing

12

Page 13: ASP.NET Routing Deep Dive

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

Page 14: ASP.NET Routing Deep Dive

14

DEMO – RouteConstraints and Routes

14

Page 15: ASP.NET Routing Deep Dive

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

Page 16: ASP.NET Routing Deep Dive

16

DEMO – Unit Testing with Routes

16

Page 17: ASP.NET Routing Deep Dive

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[]

Page 18: ASP.NET Routing Deep Dive

18

DEMO – Routes in ASP.NET WebForms

18

Page 19: ASP.NET Routing Deep Dive

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

Page 20: ASP.NET Routing Deep Dive

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

Page 21: ASP.NET Routing Deep Dive

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