Deane
Deane

Reputation: 8737

How can you access RouteData from the code-behind?

When using ASP.Net routing, how can you get the RouteData from the code-behind?

I know you can get it from the GetHttpHander method of the RouteHandler (you get handed the RequestContext), but can you get this from the code-behind?

Is there anything like...

RequestContext.Current.RouteData.Values["whatever"];

...that you can access globally, like you can do with HttpContext?

Or is it that RouteData is only meant to be accessed from inside the RouteHandler?

Upvotes: 52

Views: 34134

Answers (4)

RASKOLNIKOV
RASKOLNIKOV

Reputation: 748

  [HttpGet]
  [Route("{countryname}/getcode/")]
  public string CountryPhonecode()
  {
     // Get routdata by key, in our case it is countryname
     var countryName = Request.GetRouteData().Values["countryname"].ToString();

     // your method
     return GetCountryCodeByName(string countryName);
  }

Upvotes: 3

Jeff
Jeff

Reputation: 5963

I think you need to create a RouteHandler then you can push the values into HTTPContext during the GetHttpHandler event.

foreach (var urlParm in requestContext.RouteData.Values) {
    requestContext.HttpContext.Items[urlParm.Key] = urlParm.Value;
}

You can find more information in this MSDN article.

Upvotes: 0

Hosam Aly
Hosam Aly

Reputation: 42443

You could also use the following:

//using System.Web;
HttpContext.Current.Request.RequestContext.RouteData

Upvotes: 165

Rupert Bates
Rupert Bates

Reputation: 3061

You can use the following:

RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current));

Upvotes: 37

Related Questions