Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Routing Internals
Łukasz Łysik
ASP.NET MVC 4 Study Group
Agenda
• Routes Registration
• Routes Registration for Areas
• How routing works?
• Generating URLs
• Debugging routes
ROUTES REGISTRATION
Routes Registration Overview
Are there any
restrictions here?
Routes Registration Overview
Routes Registration MapRoute
RouteCollectionExtensions:
Routes Registration Route class
MySite/{controller}-{action}/{id}
Routes
Registration
Route class ParsedRoute
ParsedRoute
ContentPathSegment
LiteralSubseg...
Routes
Registration
Route class Constraints
Routes
Registration
Route class
Custom
Constraints
Problem: We want to have mechanism which closes our web site for
mainte...
Routes
Registration
Route class
Custom
Constraints
Coding
Routes
Registration
Route class
Custom
Constraints
Routes
Registration
Route class
Custom
Constraints
Routes
Registration
Route class DataTokens
• Contain values associated with the route that are not used when ASP.NET
routi...
ROUTES REGISTRATION FOR AREAS
Routes Registration for Areas Overview
Routes Registration for Areas Overview
Problem: Multiple controllers with the same names
Routes Registration for Areas MapRoute
Routes Registration for Areas DataTokens collection
Area
Current area name.
Namespaces
Namespaces to search for
controller...
Routes Registration for Areas Usage of DataTokens
DefaultControllerFactory:
HOW ROUTING WORKS?
Route 1
URL 1
ParsedRoute 1
Defaults 1
Constraints 1
DataTokens 1
RouteHandler 1
Route 2
URL 2
ParsedRoute 2
Defaults 2
Co...
How Routing Works? Routing Process (1)
UrlRoutingModule RouteTable.Routes
Do you have any routes
for this context?
Route 1...
How Routing Works? Routing Process (2)
UrlRoutingModule
RouteData
(based on Route 2)
Give me IRouteHandler
IRouteHandler
G...
How Routing Works? RouteData
How Routing Works? Route.ProcessConstraint
How Routing Works? Route.GetRouteData
How Routing Works? Route.ProcessConstraint
URL GENERATION
URL Generation Overview
URL Generation Examples (1)
URL Generation Examples (2)
URL Generation Matching Algorithm
RouteCollection.GetVirtualPath(Supplied values)
Does Route have required parameters?
Did...
DEBUGGING ROUTES
• Possible problems:
– Routes don’t work.
– URL is routed to wrong controller/action.
– DataTokens values are missing (are...
Debugging Routes How?
Q: How to write a tool that will debug routes?
Q: What is the name of static class which stores rout...
Demo
Debugging Routes Coding session
Debugging Routes Coding session
• RouteDebugger by Phil
Haack:
– http://haacked.com/archive/20
11/04/12/routedebugger-
2.aspx
• How it works:
– Registers ...
References
Professional ASP.NET MVC 4
(http://www.amazon.co.uk/Professional-ASP-NET-MVC-Wrox-Guides/dp/111834846X)
Questions?
Upcoming SlideShare
Loading in …5
×

ASP.NET MVC 4 - Routing Internals

10,036 views

Published on

Presentation from 2nd meeting of ASP.NET MVC 4 Study Group. It containts:
1. Route registration (also for areas).
2. How routing works?
3. URL Generation.
4. Route Debugging.

Published in: Technology

ASP.NET MVC 4 - Routing Internals

  1. 1. Routing Internals Łukasz Łysik ASP.NET MVC 4 Study Group
  2. 2. Agenda • Routes Registration • Routes Registration for Areas • How routing works? • Generating URLs • Debugging routes
  3. 3. ROUTES REGISTRATION
  4. 4. Routes Registration Overview Are there any restrictions here?
  5. 5. Routes Registration Overview
  6. 6. Routes Registration MapRoute RouteCollectionExtensions:
  7. 7. Routes Registration Route class
  8. 8. MySite/{controller}-{action}/{id} Routes Registration Route class ParsedRoute ParsedRoute ContentPathSegment LiteralSubsegment („MySite”) SeparatorPathSegment ContentPathSegment ParameterSubsegment {controller} LiteralSubsegment „-” ParameterSubsegment {action} SeparatorPathSegment ContentPathSegment ParameterSubsegments {id}
  9. 9. Routes Registration Route class Constraints
  10. 10. Routes Registration Route class Custom Constraints Problem: We want to have mechanism which closes our web site for maintenance for specified period of time. Inputs:
  11. 11. Routes Registration Route class Custom Constraints Coding
  12. 12. Routes Registration Route class Custom Constraints
  13. 13. Routes Registration Route class Custom Constraints
  14. 14. Routes Registration Route class DataTokens • Contain values associated with the route that are not used when ASP.NET routing determines whether a route matches a request. • Custom data tokens can be defined and used by custom logic in route handler, controller, action, etc. • Predefined DataTokens are related to Areas.
  15. 15. ROUTES REGISTRATION FOR AREAS
  16. 16. Routes Registration for Areas Overview
  17. 17. Routes Registration for Areas Overview Problem: Multiple controllers with the same names
  18. 18. Routes Registration for Areas MapRoute
  19. 19. Routes Registration for Areas DataTokens collection Area Current area name. Namespaces Namespaces to search for controllers. UseNamespaceFallback Set to „false” to disable searching in other namespaces. Q: In which part of request pipeline these two DataTokens are used? A: In DefaultControllerFactory.
  20. 20. Routes Registration for Areas Usage of DataTokens DefaultControllerFactory:
  21. 21. HOW ROUTING WORKS?
  22. 22. Route 1 URL 1 ParsedRoute 1 Defaults 1 Constraints 1 DataTokens 1 RouteHandler 1 Route 2 URL 2 ParsedRoute 2 Defaults 2 Constraints 2 DataTokens 2 RouteHandler 2 … Route n URL n ParsedRoute n Defaults n Constraints n DataTokens n RouteHandler n How Routing Works? RouteTable.Routes
  23. 23. How Routing Works? Routing Process (1) UrlRoutingModule RouteTable.Routes Do you have any routes for this context? Route 1 Route 2 Route n . . . ParsedRoute matches current URL? Do I have any constraints? Process constraints. Constraints satisfied? Return null.Build and return RouteData. No No No Yes Yes
  24. 24. How Routing Works? Routing Process (2) UrlRoutingModule RouteData (based on Route 2) Give me IRouteHandler IRouteHandler Give me IHttpHandler Tell IIS to use IHttpHandler which I got from matched Route.
  25. 25. How Routing Works? RouteData
  26. 26. How Routing Works? Route.ProcessConstraint
  27. 27. How Routing Works? Route.GetRouteData
  28. 28. How Routing Works? Route.ProcessConstraint
  29. 29. URL GENERATION
  30. 30. URL Generation Overview
  31. 31. URL Generation Examples (1)
  32. 32. URL Generation Examples (2)
  33. 33. URL Generation Matching Algorithm RouteCollection.GetVirtualPath(Supplied values) Does Route have required parameters? Did the call to GetVirtualPath specify a value for each required parameter? Does Route have default values that do not correspond to URL parameter? Does true value for that default, if specified, match the specified value? Process constraints Yes Yes Yes No Required = with no default value No match! No No URL: “todo/{action}” Defaults: controller=home action=index No match! No Yes
  34. 34. DEBUGGING ROUTES
  35. 35. • Possible problems: – Routes don’t work. – URL is routed to wrong controller/action. – DataTokens values are missing (are wrong). – Constraints don’t work. • What we need? – Tool that will tell us which routes are being matched, what RouteData parameters and DataTokens are. Debugging Routes Problems
  36. 36. Debugging Routes How? Q: How to write a tool that will debug routes? Q: What is the name of static class which stores routes? Q: Which request pipeline element uses RouteTable.Routes? A: RouteTable.Routes A: UrlRoutingModule
  37. 37. Demo Debugging Routes Coding session
  38. 38. Debugging Routes Coding session
  39. 39. • RouteDebugger by Phil Haack: – http://haacked.com/archive/20 11/04/12/routedebugger- 2.aspx • How it works: – Registers own HTTP module. – Attach to Request_End event. – Writes route data at the bottom of each view. Debugging Routes RouteDebugger 2.0
  40. 40. References Professional ASP.NET MVC 4 (http://www.amazon.co.uk/Professional-ASP-NET-MVC-Wrox-Guides/dp/111834846X)
  41. 41. Questions?

×