10 routing
-
Upload
rap-payne -
Category
Technology
-
view
299 -
download
0
Transcript of 10 routing
Routing in ASP.NET MVC
Remember, browsers make HTTP requests
HTTP requests use a verb to communicate their intent
� GET � POST � PUT � DELETE
� asdf
Alright. Got that out of the way. Now back to our regularly-scheduled lecture.
Which is better? This …
http://www.tic.com/Report.aspx?
Type=Sales&year=2012&month=07!
… or this …
http://www.tic.com/Sales/2012/7!
Why?
Reasons � SEO � Easy to type � Easy to remember � Hides implementation stack � URLs don’t have to change when the site
changes. � Hackable
URLs point to resources. � Uniform ________________ locator � They don’t point to pages � So RESTful URLs are more accurate,
actually
REST is … � an architectural style … � for addressing resources … � in a stateless environment … � that reduces coupling
A RESTful URL is one that conforms to all of the constraints � Separation between client and server � Stateless communication � Cacheable � A layered system � A uniform interface
A layered system has predictable parts
The usual method
Category
Thing
Action
ID
Properly RESTful url
Category
Thing
ID
(Use HTTP method as action)
Use the HTTP requests to specify the action
� GET � POST � PUT � DELETE
The URL should act as an API
� http://tic.com/Associate/List � http://tic.com/Associate/Create � http://tic.com/Associate/Details/71 � http://tic.com/Associate/Edit/71 � http://tic.com/Associate/Delete/71 � http://tic.com/Department � http://tic.com/Customer � http://tic.com/AddToCart/17
There are certain things you can do to make a URL RESTful � Give every “thing” an ID � Link things together � Use standard methods � Resources with multiple representations � Communicate statelessly
Give every thing an ID
� Easy to do if you're using a primary key and a database behind it
Link things together
� Also easy to do if you're using HTML
Use standard methods
Resources with multiple representations
� HTML � XML � VCard
Communicate statelessly � Aaaand yet again, the web makes this easy.
Okay, I'm sold on RESTful urls. How do I get them into MVC?
Registering routes tells IIS that if a user asks for X, send them to Y
We use the MapRoute() method to create these routes MyRoutes.MapRoute(! string RouteName,! string URL,! object Defaults);!� Says when URL comes through, what do
we do with it?
Routing in ASP.NET MVC are set in Application_Start � Pulled out into a static method by default. public static void RegisterRoutes(RouteCollection routes)!{! routes.IgnoreRoute("{resource}.axd/{*pathInfo}");! routes.MapRoute(! "Default", // Route name! "{controller}/{action}/{id}", // URL with parms! new { controller = "Home", action = "Index", ! id = UrlParameter.Optional } // defaults! );!}!
Routes are matched in order that they appear
These routes work for WebForms also � They're exactly the same.
Hardcoded routes are easy routes.MapRoute(! "ListAllProducts",! "Product/List",! "~/Admin/Products.aspx?id=all",! false! );!
Hands-on literal routes
We put placeholders in curly braces � aka. URL Parameters
Examples Route definition Example of matching url
{controller}/{action}/{category}
/Products/show/beverage
{table}/details.aspx /Products/Details.aspx
blog/{action}/{entry} blog/read/1234
{reportType}/{year}/{month}/{day}
/sales/2012/7/15
{locale}/{action} en-US/show
Hands-on matching routes
Optional parameters can save you from creating a lot of routes � Example: you want to match � Clients/Miller � Clients/Miller/Harold � Clients/Miller/Harold/Dr � … with the same route � Simply make first name and title optional
with: � new { FirstName = UrlParameter.Optional,
Title = UrlParameter.Optional }
Hands-on optional parameters
Hands-on default values
The parameters can have one of two types of constraints 1. Regular expressions 2. An IRouteConstraint
Regular expression constraints routes.MapRoute(! "BlogArchive",! "Archive/{entryDate}",! new { controller="Blog", action="Archive" }, ! new { entryDate=@"\d{2}-\d{2}-\d{4}" }!);!
Hands-on constraints
Conclusion � RESTful urls are easier to use, therefore
better � MVC lends itself well to REST; in fact REST is
pretty much required to get to controllers and actions
� Routes are set up in the global.asax file
Further study � Intro to REST
� http://www.infoq.com/articles/rest-introduction