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.
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.
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.
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. 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. 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.
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
35. Possible problems:
Routes dont work.
URL is routed to wrong controller/action.
DataTokens values are missing (are wrong).
Constraints dont work.
What we need?
Tool that will tell us which routes are being
matched, what RouteData parameters and
DataTokens are.
Debugging Routes Problems
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
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