views:

16

answers:

2

Is there a method to extract the area, controller, action, and querystring from a URL in ASP.NET MVC? Don't want to reinvent the wheel implementing my own if there's already a way to do it.

Thanks!

A: 

You could pull this information from the routes:

var controller = RouteData.Values["controller"];
var action = RouteData.Values["action"];
var action = RouteData.Values["area"];

As far as the query string is concerned you could pull it from the Request:

var queryString = Request.Url.Query;

UPDATE:

If the url is coming from a DB:

var uri = new Uri(someStringThatRepresentsTheUrlAndComesFromADb);
var queryString = uri.Query;
Darin Dimitrov
Hmm that's actually cool, but the URL string is not from the current context, it's coming from a DB.
Ozzie Perez
@Ozzie, please see my update.
Darin Dimitrov
Thanks, yeah I can get the querystring. The issue is in getting the area, controller, action really. Sometimes an action has a trailing '/' and sometimes it doesn't, so counting from the right can be misleading. On the other hand, an application can be within different directory structures in IIS, so counting positions from the left isn't straightforward either...
Ozzie Perez
A: 

I was able to get it from here:

http://stackoverflow.com/questions/1481565/string-url-to-routevaluedictionary

To get the area from this example I used:

string area = routeData.DataTokens["area"].ToString();

Ozzie Perez