Ответ 1
Я использую System.Web.VirtualPathUtility.ToAbsolute.
Каков наилучший способ использования ResolveUrl() в общей/статической функции в Asp.Net? Мое текущее решение для VB.Net:
Dim x As New System.Web.UI.Control
x.ResolveUrl("~/someUrl")
Или С#:
System.Web.UI.Control x = new System.Web.UI.Control();
x.ResolveUrl("~/someUrl");
Но я понимаю, что это не лучший способ назвать это.
Я использую System.Web.VirtualPathUtility.ToAbsolute.
Стоит отметить, что хотя 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 для получения страницы, а затем запускаю любые методы управления веб-сайтами.