我在asp.net web forms 4.0中使用路由并取得了一些成功。在我的页面中,我使用Page.GetRouteURL来生成这样的路线。
<a href = '<%=GetRouteUrl("MyRoute", new {MyFirstRouteValue = "ABC", MySecondRouteValue=123}) #>' >Link Text</a>
这非常有效,但我发现有时我需要在app_code中的类中使用此功能。我可以用String.Format手动构建路由,但这有点草率,因为它会复制定义路由的Global.asax中的代码。
当然,App_Code中的类中没有Page对象,所以我不能只调用GetRouteUrl。查看docs on msdn我看到的内容看起来很有帮助。
提供此方法用于编码 方便。它相当于 打电话给 RouteCollection.GetVirtualPath(RequestContext的, String,RouteValueDictionary)方法。
所以我按照文档到this page说明System.Web.Routing.GetVirtualPath()需要一个System.Web.Routing.RequestContext对象。我知道HttpContext对象,但我无法弄清楚RequestContext是什么。有人有运气吗?
答案 0 :(得分:9)
RequestContext
以a property的形式提供给HttpRequest对象,因此您可以将其引用为HttpContext.Current.Request.RequestContext
。例如,
public string GetRouteUrl(string routeName, object routeParameters)
{
var dict = new RouteValueDictionary(routeParameters);
var data = RouteTable.Routes.GetVirtualPath(HttpContext.Current.Request.RequestContext, routeName, dict );
if (data != null)
{
return data.VirtualPath;
}
return null;
}