#.net #asp.net #routing #webforms
#.net #asp.net #маршруты #веб-формы
Вопрос:
Я использую маршрутизацию в asp.net веб-формы 4.0 с некоторым успехом. На своих страницах я использую Page.GetRouteURL для генерации подобных маршрутов.
<a href = '<%=GetRouteUrl("MyRoute", new {MyFirstRouteValue = "ABC", MySecondRouteValue=123}) #>' >Link Text</a>
Это работает отлично, но я обнаружил, что бывают случаи, когда мне нужно иметь эту функциональность в классе в app_code. Я мог бы просто вручную построить маршрут с помощью String.Формат, но это немного неаккуратно, поскольку это дублировало бы код в Global.asax, который определяет маршруты.
Конечно, в классе в App_Code нет объекта Page, поэтому я не могу просто вызвать GetRouteUrl. Просматривая документы на msdn, я вижу кое-что, что выглядит полезным.
Этот метод предусмотрен для удобства кодирования. Это эквивалентно вызову RouteCollection.Метод GetVirtualPath(RequestContext, String, RouteValueDictionary).
Итак, я перешел по документам на эту страницу, в которой указано, что System.Web.Routing.Для GetVirtualPath() требуется System.Web.Routing.Объект RequestContext. Я знаю об объекте HttpContext, но я не могу понять, что такое RequestContext. Кому-нибудь повезло с этим?
Ответ №1:
RequestContext
доступен как свойство объекта 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;
}
Комментарии:
1. Спасибо Vinay! Это сэкономило мне часы поиска в Google!