5.

Is there any way to handle variable number of segments in a route definition ?

Using Catch-All Routes
Normally, in order to match a route, a URL must contain a particular number of segments. If you want to match a URL, regardless of the number of segments in the URL, then you need to create something called a catch-all parameter.

Here’s an example of a route that uses a catch-all parameter:

routes.MapRoute(
"SortRoute",
"Sort/{*values}",
new {controller = "Sort", action = "Index"}
);

Notice that the route parameter named values has a star in front of its name. The star marks the parameter as a catch-all parameter. This route matches any of the following URLs:
/Sort
/Sort/a/b/d/c
/Sort/Women/Fire/Dangerous/Things