Transcript
Page 1: ASP.NET Routing Deep Dive

ASP.NET Routing Deep DiveIf you name it correctly, they will find it.

Page 2: ASP.NET Routing Deep Dive

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]

Page 3: ASP.NET Routing Deep Dive

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

Page 4: ASP.NET Routing Deep Dive

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

Page 5: ASP.NET Routing Deep Dive

5

HttpModules and HttpHandlers

Http Module 1

Http Module 2

Http Module 3

Http Handler

Http Handler

Http Handler

Page 6: ASP.NET Routing Deep Dive

6

ASP.NET Routing (System.Web.Routing)

UrlRoutingModuleIHttpModule

PageRouteHandlerIRouteHandler

UrlRoutingHandlerIHttpHandler

Content (Page, etc.)

Page 7: ASP.NET Routing Deep Dive

7

DefaultControllerFactoryIControllerFactory

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

UrlRoutingModuleIHttpModule

MvcRouteHandlerIRouteHandler

MvcHandlerUrlRoutingHandler

MyController.Execute()Controller

Page 8: ASP.NET Routing Deep Dive

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"}

Page 9: ASP.NET Routing Deep Dive

9

DEMO – Out of the box MVC Routing

Page 10: ASP.NET Routing Deep Dive

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

Page 11: ASP.NET Routing Deep Dive

11

DEMO – RouteConstraints and Routes

Page 12: ASP.NET Routing Deep Dive

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());

Page 13: ASP.NET Routing Deep Dive

13

DEMO – Unit Testing with Routes

Page 14: ASP.NET Routing Deep Dive

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

Page 15: ASP.NET Routing Deep Dive

15

DEMO – Routes in ASP.NET WebForms

Page 16: ASP.NET Routing Deep Dive

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

Page 17: ASP.NET Routing Deep Dive

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

Page 18: ASP.NET Routing Deep Dive

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]


Top Related