ASP.Net: использование System.Web.UI.Control.ResolveUrl() в общей / статической функции
Каков наилучший способ использования ResolveUrl() в общей / статической функции в Asp.Net? Мое текущее решение для VB.Net:
Dim x As New System.Web.UI.Control
x.ResolveUrl("~/someUrl")
Или C#:
System.Web.UI.Control x = new System.Web.UI.Control();
x.ResolveUrl("~/someUrl");
Но я понимаю, что это не лучший способ назвать это.
3 ответа
Стоит отметить, что хотя System.Web.VirtualPathUtility.ToAbsolute очень полезен, он не является идеальной заменой Control.ResolveUrl.
Есть по крайней мере одно существенное отличие: Control.ResolveUrl очень хорошо обрабатывает строки запросов, но они заставляют VirtualPathUtility генерировать исключение HttpException. Это может быть совершенно загадочным в первый раз, когда это происходит, особенно если вы привыкли к тому, как работает Control.ResolveUrl.
Если вы знаете точную структуру строки запроса, которую хотите использовать, это достаточно легко обойти, а именно:
public static string GetUrl(int id)
{
string path = VirtualPathUtility.ToAbsolute("~/SomePage.aspx");
return string.Format("{0}?id={1}", path, id);
}
... но если строка запроса передается из неизвестного источника, вам нужно как-то разобрать ее. (Прежде чем углубиться в это, обратите внимание, что System.Uri может сделать это за вас).
Я обычно использую HttpContext.Current, чтобы получить страницу, а затем запускаю любые методы управления страницей / веб-интерфейсом.