你如何在代码后台访问路由数据?

52
当使用ASP.Net路由时,如何从代码后台获取RouteData?我知道您可以从RouteHandler的GetHttpHander方法中获取它(您会获得RequestContext),但是您能否从代码后台获取它?是否有类似于...
RequestContext.Current.RouteData.Values["whatever"];

你能像访问HttpContext一样全局访问RouteData吗?

还是说,只能从RouteHandler内部访问RouteData?


要创建一个像Url.RouteUrl一样的URL,您可以在代码后台文件中使用GetRouteUrl方法。(我知道这不是您问题的答案,但当我搜索此问题时,我总是能找到您的问题。所以也许它会帮助某人。 :-) - Krisztián Balla
4个回答

165

你也可以使用以下方法:

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

37

您可以使用以下代码:

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

11
注意,这样做会再次调用路由,并且这就像N个请求进入您的路由表。 - Chad Moran

2
  [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);
  }

0

我认为你需要创建一个RouteHandler,然后在GetHttpHandler事件期间将值推入HTTPContext。

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

您可以在此 MSDN 文章中找到更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接